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

Pfad eines Programmes auswählen und in Datei schreiben

 

Cope
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 06.04.2014, 12:50     Titel: Pfad eines Programmes auswählen und in Datei schreiben
  Antworten mit Zitat      
Hallo zusammen,
ich möchte mittels GUI eine Batch-Datei für den Aufruf von Fortran Programmen erstellen. Sprich, ich möchte erstmal eine *.bat-Datei schreiben. Diese soll dann in etwa folgende Form haben:

C:\Ordner1\Ordner2\programm.exe

Das ganze habe ich, dank der Hilfe im Programmierung Forum schon folgendermaßen realisiert:

Code:
   % Zuweisung des Dateinamens
    dateiname = 'batch.bat';
   
    % Zugriff auf Datei "dateiname" verschaffen und zum Schreiben (write) öffnen
    fid = fopen (dateiname, 'w');

 % Pfad abfragen
    [FileName, Pfad] = uigetfile('*.exe', 'Bitte wählen Sie das Programm aus: ');

% Pfad in Datei schreiben
fprintf(fid, '%s \n', [fullfile(Pfad, FileName)];

% Datei schließen
fclose(fid);


Jetzt möchte ich das ganze gerne über GUI realisieren. Hierfür habe ich eine Oberfläche mit einem Pushbutton erzeugt. Mit diesem soll der Pfad ausgewählt und anschließend in ein statisches Textfeld (zur Kontrolle) und ein edit-Textfeld (zur evtl. manuellen Änderung) übergeben und gleichzeitig in eine batch.bat-Datei geschrieben werden.

Jetzt versuche ich bereits seit einiger Zeit die richtigen Positionen für die Aufrufe zu finden. Zuletzt habe ich alles an die pushbutton_Callback geschrieben. Aber ich nehme an, dass die Zuweisung des Dateinamens wahrscheinlich eher in die Opening-Funktion gehört, oder?

Code:
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)




        % Zuweisung des Dateinamens
        dateiname = 'batch.bat';
        % Zugriff auf Datei "dateiname" verschaffen und zum Schreiben (write) öffnen
        fid = fopen (dateiname, 'w');
       
         [FileName, Pfad] = uigetfile('*.exe', 'Bitte wählen Sie das Programm aus: ');
         % Ausgewählten Programmpfad in das statische Textfeld schreiben
         set(handles.text1, 'string', fullfile(Pfad, FileName));
         % Ausgewählten Programmpfad in das edit-Textfeld schreiben
         set(handles.edit1, 'string', fullfile(Pfad, FileName));
         
         
         % Text Zeile in Datei schreiben
         fprintf(fid, '%s \n', fullfile(Pfad, FileName));
           
         % Datei wieder schließen
         fclose(fid);


Hat jemand eine Ahnung ob ich das in etwa so realisiert bekomme?

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

und wo liegen nun die Probleme mit deinem jetzigen Ansatz?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 06.04.2014, 13:02     Titel:
  Antworten mit Zitat      
Ich bekomme aktuell folgende Fehler angezeigt:

Attempt to reference field of non-structure array.

Error in batch>pushbutton1_Callback (line 101)
set(handles.text1, 'string', fullfile(Pfad, FileName));

Error in gui_mainfcn (line 96)
feval(varargin{:});

Error in batch (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)batch('pushbutton1_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating uicontrol Callback
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2014, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

gibt es denn ein Objekt in der GUI mit Tag text1?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 06.04.2014, 15:54     Titel:
  Antworten mit Zitat      
Laut property inspector müsste das statische Textfeld "text1" sein. Das habe ich noch einmal zusätzlich eingebaut um die Auswahl zu überprüfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann bitte ein komplettes, reproduzierbares Beispiel zur Verfügung stellen (.m + .fig).

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 06.04.2014, 19:25     Titel:
  Antworten mit Zitat      
Aber klar doch...

batch.fig
 Beschreibung:

Download
 Dateiname:  batch.fig
 Dateigröße:  2.49 KB
 Heruntergeladen:  383 mal
batch.m
 Beschreibung:

Download
 Dateiname:  batch.m
 Dateigröße:  4.69 KB
 Heruntergeladen:  380 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.04.2014, 19:40     Titel:
  Antworten mit Zitat      
Hallo,

öffnest du evtl. die .fig per Doppelklick und drückst dann auf den Button?
Das geht bei keiner GUI. Du musst stattdessen die .m-Datei ausführen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 06.04.2014, 21:14     Titel:
  Antworten mit Zitat      
Ohh... das ist fast schon peinlich. Aber ja, du hast recht! Sorry!

Vielen Dank für den Tipp!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cope
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 21.02.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 07.04.2014, 15:17     Titel:
  Antworten mit Zitat      
Hallo,
ich nochmal.

Ich würde die erzeugte Batch-Datei jetzt gerne erweitern. Sprich hinter dem Program-Pfad noch einen Programmaufruf setzen.

Das ganze soll dann in etwa so aussehen:

C:\\Ordner1\Ordner2\Programm Programmaufruf1 Programmaufruf2 ...

Hierfür habe ich jetzt einen neuen Push-Button und ein neues edit2-Feld erzeugt. Nun möchte ich entweder über eine Dateiauswahl oder über das edit2-Feld den Programmaufruf 2 auswählen/eingeben.

Nach der Eingabe soll sich das static-Feld text1 insoweit verändern, als das dort der Pfad inkl. Programm stehen, dann ein Leerzeichen und danach der Programmaufruf. Dies soll dann auch so in die erzeugte Batch.bat Datei geschrieben werden.

Ich denke die Zuweisung des Dateinamens und den Zugriff darauf muss ich nicht jedes mal aufs neue verschaffen, da dies ja schon bei der Pfadauswahl geschieht, oder?

Code:
% Zuweisung des Dateinamens
        dateiname = 'batch.bat';
        % Zugriff auf Datei "dateiname" verschaffen und zum Schreiben (write) öffnen
        fid = fopen (dateiname, 'w');


Hat jemand eine Idee was ich falsch mache?

batch.fig
 Beschreibung:

Download
 Dateiname:  batch.fig
 Dateigröße:  3.16 KB
 Heruntergeladen:  354 mal
batch.m
 Beschreibung:

Download
 Dateiname:  batch.m
 Dateigröße:  6.96 KB
 Heruntergeladen:  418 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Funktionen haben getrennte Arbeitsbereiche (Workspaces). Du musst dir die Information FileName also entweder neu holen oder innerhalb der GUI abspeichern, siehe
http://www.mathworks.de/de/help/mat.....-data-in-a-guide-gui.html

Grüße,
Harald
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.