WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

*.exe mit Parametereingabe

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 01.04.2011, 12:17     Titel: *.exe mit Parametereingabe
  Antworten mit Zitat      
Liebe Leute,

ich habe aus einer Gui mittels mcc eine menu.exe erzeugt. Nun möchte ich selbige aus der Kommandozeile starten und dabei gleich noch einen Parameter übergeben. Dabei handelt es sich um eine Input-Datei im txt.-Format, deren Pfad und Namen ich kenne.

Code:

menu.exe 'pfad\inputfilename.txt'
 


Wie muss ich dazu mein menu-m-file bearbeiten, um diesen Parameter beim Starten der menu.exe übergeben zu bekommen? Es hat ja sicher etwas mit varargin zu tun, womit ich allerdings noch nie gearbeitet habe.

Für eure Hilfe danke ich bereits im Vorfeld vielmals.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2011, 12:21     Titel:
  Antworten mit Zitat      
Hallo,

es reicht an sich vollkommen aus, die Eingabeparameter wie üblich zu definieren. Beim Aufruf kannst du die ' dann auch weglassen.

Eine schöne Alternative wäre, den Nutzer die Datei mit uigetfile auswählen zu lassen Smile

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 01.04.2011, 12:33     Titel:
  Antworten mit Zitat      
Lieber Harald,

vielen Dank für deine rasche Antwort. Eine Lösung mit uigetfile habe ich schon realisiert, allerdings will mein Chef zusätzlich die hier beschriebene Möglichkeit haben.

Bitte verzeih mir, wenn ich noch mal nachfrage, aber wie mache ich das für die von mir vorgeschlagene Form, z. B.

Code:

menu.exe 'C:\Win\Temp\daten.txt'
 


Woher kennt mein Programm diesen manuell eingegebenen Pfad dann als Parameter bzw. wie bekomme ich ihn dann innerhalb der Funktion aufgegriffen und gespeichert?

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2011, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

es ist wirklich so einfach, wie es nur sein kann. Du musst die Funktion nur mit einem Eingabeargument definieren. Versuche z.B. folgendes zu kompilieren:
Code:


Das einzige, worauf man achten muss: sämtliche Argumente kommen als Strings nach MATLAB.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 01.04.2011, 14:03     Titel:
  Antworten mit Zitat      
Der Kopf meiner menu-Funktion (welche wiederum viele Unterfunktionen enthält) sieht so aus:

Code:


Wenn ich nach erfolgreicher Kompilierung im Kommandofenster

Code:

menu.exe 'C:\Windows\Temp\daten.txt'
 


eingebe, so erscheint folgende Meldung:

Zitat:

''C:\Windows\Temp\daten.txt''

Warning: The input to STR2FUNC "'C:\Windows\Temp\daten.txt'" is not a valid function name. This will gernerate an error in a future release.

> In menu at 37


Anschließend listet er mir die kompletten CreateFunctions auf, die in menu.m beim Erstellen des GUI erzeugt wurden.

Scheinbar habe ich irgendetwas noch nicht begriffen. Sorry.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2011, 14:12     Titel:
  Antworten mit Zitat      
Hallo,

mal eine ganz andere Frage: macht menu.m in MATLAB das, was es soll?

Meine Vermutung ist an dieser Stelle, dass die falsche menu.m aufgerufen wird.
Code:
which menu
C:\MATLAB\R2010b\toolbox\matlab\uitools\menu.m

Vorschläge:
1. Umbenennen der Datei
2. Sicherstellen, dass du sowohl beim Kompilieren als auch beim Aufruf in dem Verzeichnis bist, in dem sich DEINE menu.m befindet.

Ansonsten ist mir schleierhaft, was ein Dateiname als Eingabe für str2func bewirken soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 01.04.2011, 14:25     Titel:
  Antworten mit Zitat      
Also das sollte alles stimmen. Der reine Aufruf

Zitat:

menu.exe


von der Kommandozeile aus funktioniert ja auch. Nur unter Hinzuziehen des String-Pfades gibt es dann dieses Problem.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.04.2011, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

da weiß ich zunächst auch nicht mehr weiter. Um dir weiterhelfen zu können, bräuchte ich ein Beispiel, das die Fehlermeldung reproduziert.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 01.04.2011, 15:31     Titel:
  Antworten mit Zitat      
Code:
menu.exe C:\TEMP\daten.txt


muss funktionieren, zusätzliche '' sind nicht notwendig, weil jeder Input automatisch ein String ist. Falls du integers übergeben willst, kannst du mit

Code:


arbeiten..
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 04.04.2011, 08:10     Titel:
  Antworten mit Zitat      
Liegt es vielleicht daran, dass er mir beim Starten der exe noch folgende Meldung ausgibt:

Zitat:

MATLAB:I18n:Inconsistent Locale - The system locale setting,...is different from the user locale setting...


Ich mach mich mal schlau, wie ich das beseitigen kann und melde mich dann noch mal.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.04.2011, 17:21     Titel:
  Antworten mit Zitat      
Hallo,

durch Ändern der Ländereinstellungen auf Nutzerebene.
Allerdings führt diese Warnung allgemein nicht zu Problemen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 05.04.2011, 10:27     Titel:
  Antworten mit Zitat      
Ok, aber woran könnte es dann noch liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 05.04.2011, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

könnte es sein, dass menu bei Dir ein GUI ist, welches Du mit guide erzeugt hast? Das würde zur Fehlermeldung passen. In dem Fall müsste es um Zeile 37 in etwa so aussehen:
Code:

if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 

Dann würde ich folgendes machen: die Zeilen ersetzen durch
Code:

if nargin && ischar(varargin{1}) && ~strncmp(varargin{1}, 'path=', 5)
    gui_State.gui_Callback = str2func(varargin{1});
end
 

d.h., Du fängst den Fall, dass varargin{1} mit "path=" anfängt, ab. Das .exe müsstest Du dann mit
Code:

menu.exe path="c:\wo_auch_immer.txt"
 

aufrufen (und dann natürlich das "path=" entfernen!).

Titus

PS: das selbe Problem müsste aber auch schon in MATLAB und nicht nur bei menu.exe auftreten, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 05.04.2011, 12:09     Titel:
  Antworten mit Zitat      
Hallo Titus,

ja, genau so ist es. Ich habe die Menüs mit guide erzeugt und anschließend mittels

Code:

mcc -m main_menu emergency_stop_valve
 


zwei miteinander verknüpfte GUIs als eine exe erzeugt.

Ich schreib jetzt mal den richtigen Namen, nämlich "main_menu", welchen ich nur der Übersichtlichkeit/Verallgemeinerung als "menu" bezeichnet hatte. Dadurch können wir also ausschließen, dass es sich mit der matlabinternen Funktion "menu" beißt, wie es Harald vermutet hatte.

Ich probiere es gleich mal aus. Vielen Dank.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 05.04.2011, 14:22     Titel:
  Antworten mit Zitat      
Suuuuuper. Das funktioniert. Very Happy

Wie müsste ich jetzt aber mein M-File abändern, wenn ich den Aufruf so gestalten will:

Zitat:

main_menu.exe /ndt C:\Windows\Temp\input.txt C:\Windows\Temp\output.txt


Und wie rufe ich diese gespeicherten Strings ab? Kann ich das einfach mit

Code:

inputpfad = varargin{1}
outputpfad =varargin{2}
 


machen und dann den Pfad vom "path=" bereinigen?

Was genau macht eigentlich der Code, bevor und nachdem du ihm sagst, dass er einen Stringvergleich mit "path=" machen soll? Bitte entschuldigt die Fragen. Ich möchte einfach gern wissen, was mir geholfen hat, um es beim nächsten Mal von allein zu bringen.

PS: Nein, wenn ich das GUI aus dem Matlab-Editor heraus gestartet habe, hat immer alles einwandfrei funktioniert.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.