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

Variablenübergabe und -speicherung

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 14.04.2011, 07:03     Titel: Variablenübergabe und -speicherung
  Antworten mit Zitat      
Hallo Leute,

mit folgendem Befehl möchte ich gern meine Standalone-Application aufrufen und dabei eventuell Parameter übergeben:

Zitat:

C:\Windows\Temp\TuNoise.exe /ndt 'pfad\inputfilename.txt' 'pfad\outputfilename.txt'


Wenn der Parameter '/ndt' gefunden wird, sollen die beiden nachfolgenden Parameter gespeichert werden. Wenn er nicht gefunden wird, soll nur normal gestartet werden. Leider funktioniert es nicht so, wie ich es mir vorstelle:

Code:

if nargin && ischar(varargin{1}) && ~strncmp(varargin{1}, '/ndt', 4)
gui_State.gui_Callback = str2func(varargin{1});
path_input = varargin{2}
path_output = varargin{3}
end
 


Dazu habe ich zwei Fragen:

1. Wie speichere ich diese Parameter?

2. Wo genau muss ich den Vergleich durchführen (openingfcn etc)?

Für Hilfe bin ich stets dankbar.

Es grüßt verzweifelt

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: 20.07.2011, 17:07     Titel:
  Antworten mit Zitat      
Hallo Leute,

ich habe mich jetzt lange nicht mehr mit der Problematik beschäftigt und bin deshalb noch nicht weiter gekommen. Nun wollte ich mich dem Thema wieder zuwenden. Hat jemand einen Rat?

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2011, 18:26     Titel:
  Antworten mit Zitat      
also, wenn du noch keine speziellen Variablen im Hauptprogramm dafür hast (und dann auf die Base zugreifen willst/kannst), würde auch ne globale Variable reichen.

den vergleich musst du dann da machen, wo auch sonst (ohne /ndt) die Dateien geöffnet werden, z.B. dann, wenn deine neue global nicht leer ist. (achtung: nicht auf exits prüfen, existieren tun die globalen immer...)
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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: 24.07.2011, 09:34     Titel:
  Antworten mit Zitat      
Lieber Andy,

vielen Dank erstmal für deine Antwort. Leider verstehe ich deine
Antwort nicht ganz. Vielleicht hole ich mal ein bisschen weiter aus.

Meine *.exe wird aus einem anderen Programm aus aufgerufen und da dort die Speicherorte der Input- und Outputdatei schon festgelegt werden, sollen diese Pfade in mein Programm herein übergeben werden, da sie ja bekannt sind und nicht noch einmal neu festgelegt werden müssen. Wenn ich nun die mit mcc erstellte *.exe aus dem DOS-Fenster starte und zwar gleich mit Übergabe der Pfade, dann sollen diese einfach als Strings in zwei separate Variablen gespeichert werden. Und genau hier weiß ich nicht, wie ich das machen kann. An welcher Stelle kann ich diese Parameter abgreifen und dauerhaft speichern? Bisher scheinen sie immer überschrieben zu werden. Ich weiß einfach nicht weiter und bin für jede Hilfe dankbar. Heute abends poste ich am besten gleich noch mal, was beim Starten der exe im cmd-Window dasteht. Bin gerade nicht am richtigen Rechner.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 24.07.2011, 09:50     Titel:
  Antworten mit Zitat      
ah, ich hab es jetzt so verstanden:

* ein Programm ruft deine Matlab-exe auf
* das will manchmal Pfade speichern, manchmal nicht
(d.h. vorherbestimmt gibt es Pfade, die ggf. geändert werden können)

-> d.h. du musst deine Pfade in eine Art ini-Datei auslagern, und dorthin speichern wenn du in angegebenen Codeteil landest.

Im normalen Programmablauf kannst du dann in jedem Fall die Werte aus der ini nehmen.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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: 25.07.2011, 15:03     Titel:
  Antworten mit Zitat      
hallo andy,

es soll so sein, dass man im cmd-fenster eingibt: main_menu.exe ndt path=C:\Windows\Temp\input.txt path=C:\Windows\Temp\output.txt

wie das von einem anderen programm aus passiert, soll nicht meine sorge sein, aber für dieses von mir angegebene syntax soll folgendes passieren:

1. initialisiere das programm
2. checke in einer if-anweisung, ob der parameter 'ndt' da ist
3. wenn ja: speichere die beiden dahinter folgenden pfade als strings in separate variablen und öffne das gui
4. wenn nein: öffne das gui trotzdem, aber ohne eine pfadzuweisung zu kennen

so sieht der beginn meines mit guide erzeugten gui-codes aus:

Code:

function varargout = main_menu(varargin)

global ndt inpath outpath

% MAIN_MENU M-file for main_menu.fig
%      MAIN_MENU, by itself, creates a new MAIN_MENU or raises the existing
%      singleton*.
%
%      H = MAIN_MENU returns the handle to a new MAIN_MENU or the handle to
%      the existing singleton*.
%
%      MAIN_MENU('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN_MENU.M with the given input arguments.
%
%      MAIN_MENU('Property','Value',...) creates a new MAIN_MENU or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before main_menu_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to main_menu_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text91 to modify the response to help main_menu

% Last Modified by GUIDE v2.5 18-Jan-2010 14:52:11

% Begin initialization code - DO NOT EDIT
gui_Singleton = 0;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @main_menu_OpeningFcn, ...
                   'gui_OutputFcn',  @main_menu_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);

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

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

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

ndt = varargin{1}
inpath = varargin{2}
outpath = varargin{3}

% --- Executes just before main_menu is made visible.
function main_menu_OpeningFcn(hObject, eventdata, handles, varargin)


% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to main_menu (see VARARGIN)

global ndt inpath outpath

set(handles.inputpath, 'String', inpath);
set(handles.outputpath, 'String', outpath);

% Choose default command line output for main_menu
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
[...]
 


so und mein problem ist nun, dass ich nicht einfach mit dem befehl varargin{1} den ersten von mir eingegebenen parameter bekomme, sondern irgendwie eine 175.002. wie kann ich nun die tatsächlich angegebenen strings im programm abrufen. erst wenn diese übergabe funktioniert kann ich ja meinen finalen programmcode tatsächlich mit mcc erzeugen lassen. bisher habe ich es immer nur erzeugt, um zu sehen, ob es funktioniert.

es muss doch auch ohne das schreiben einer separaten datei gehen.

hast du vielleicht noch eine idee?

beste grüße

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: 25.07.2011, 15:14     Titel:
  Antworten mit Zitat      
Code:

ndt = varargin{1}
inpath = varargin{2}
outpath = varargin{3}
 


komischerweise gibt er mir im cmd-window hier komischerweise die korrekten strings an, aber wenn ich diese (als global formulierten) dann in meinem gui mit

Code:

set(handles.inputpath, 'String', inpath);
set(handles.outputpath, 'String', outpath);
 


anzeigen will, erfolgt nicht die korrekte ausgabe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 27.07.2011, 11:55     Titel:
  Antworten mit Zitat      
achso, ich dachte, das ginge schon.
warum du nur eine Zahl zurückbekommst, weiss ich leider nicht. Würde vermuten, dass das nur ein Handle ist - kannst du zur Laufzeit aus dem cmd in Matlab debuggen? Dann würde vielleicht schon ein get() helfen.

naja, ohne schreiben einer seperaten datei würde ja bedeuten, dass der anwender/das andere Programm IMMER mit dem Parameter arbeiten soll...


Ähm, aber in deinem Code definierst du doch ZUERST handles.inputpath und dann legst du inpath fest
Zitat:
Code:
% --- Executes just before main_menu is made visible.
- oder täuasch ich mich da?

äh - ?? - hast du get und set verwechselt?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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: 30.07.2011, 06:22     Titel:
  Antworten mit Zitat      
hey andy,

ich hab jetzt die lösung und poste sie nächste woche. danke trotzdem für deine hilfe.

beste grüße und ein schönes wochenende wünscht

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



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.