Aufruf einer software von Matlab
Die Eingabeaufforderung funktioniert gut bei allen Respekt den Betrieb der software sowie die Erstellung von berichten und output-Dateien. Zum erzeugen einer ouput-Datei mit dem gewünschten Ergebnis führen, haben wir zum ausführen der ausführbaren Datei des Programms, die über eine parameter-Datei. Zum Beispiel, wenn ich waren für die Implementierung dieser Schritte in der Eingabeaufforderung, es wäre so:
“path\report.exe” –f Report.rwd –o Report.rwo
Die Ausgabe-Datei-Bericht.rwo, diese Datei enthält die variable exportiert werden.
Nun zum implementieren dieses in Matlab, unten ist ein kleines script was eine wesentliche, was ich versuche zu erreichen. Es ruft die software für jeden Lauf und extrahiert die Daten.
for nr=1:NREAL
dlmwrite(‘file.INC’,file(:,nr),’delimiter’,’\n’); % Writes the data file for each run
system('"path\file.dat"'); % calls software
system('"path\Report.rwd" –o "path\Report.rwo"'); % calls report
[a,b]=textread(‘"path\Report.rwo".rwo’,’%f\t%f’); % Reads the data and store it in the variable b
end
Also ich habe zwei Probleme:
1) Wenn ich dieses Skript in Matlab, es generiert keine Ausgabe Datei-Bericht.rwo. Folglich, es gibt einen Fehler, wenn er die Zeile erreicht, die mit "textread" - Funktion, wegen des Fehlens der Datei.
2) Wenn Matlab Anrufe Bericht (.rwd-Datei), es fordert mich zu drücken Sie die EINGABETASTE, oder geben Sie 'q' zum beenden. Wenn angenommen, es gibt Hunderte von Dateien, zu laufen, dann für jede Datei würde ich aufgefordert werden, drücken Sie die EINGABETASTE, um fortzufahren. Die folgende Zeile bewirkt, dass die Eingabeaufforderung:
system('"path\Report.rwd" –o "path\Report.rwo"'); % Calls report
ÄLTEREN EDIT: Es gibt 2 updates zu meinem problem wie folgt:
Update 1: Es scheint, dass Teil 2 von meinem problem oben wurde gelöst, indem Jacob. Es ist in Ordnung, für einen Lauf. Aber das endgültige Ergebnis wird erst bestätigt, wenn ich in der Lage bin zu laufen, mein ganzes Programm, das beinhaltet, mit Hunderten von Dateien.
Update 2: kann ich die software ausführen und generieren Sie die Ausgabe-Datei mittels Eingabeaufforderung wie folgt:
**“path\mx200810.exe” –f file.dat**
-
Dieser Befehl liest den Bericht parameter-Datei und erzeugt die Ausgabe-Datei:
"path\report.exe" –f " - Bericht.rwd –o Melden.rwo
LETZTE ÄNDERUNG:
1) ich bin in der Lage, die software ausführen, vermeiden Sie die Eingabeaufforderung drücken Sie die EINGABETASTE, und generieren Sie die Ausgabe-Datei mit Hilfe von Matlab durch die folgenden Befehle:
system('report.exe /f Report.rwd /o Report.rwo')
system('mx200810.exe -f file.dat')
Allerdings war ich in der Lage, es zu tun, nur nach dem kopieren meine erforderlich .exe-und .dll-Dateien in den gleichen Ordner wo ich meine .dat-Datei. Also ich bin mit den .m-Datei über die gleichen Ordner, wo ich alle diese Dateien.
2) es ist Aber immer noch eine Fehlermeldung im Matlab-Kommando-Fenster, welches sagt:
"...STOP: Unable to open the following file as data file:
'file.dat'
Check path name for spaces, special character or a total length greater than 256 characters
Cannot find data file named 'file.dat'
Date and Time of End of Run: .....
ans = 0"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Strings eingeschlossen in
" .. "
ungültig sind in MATLAB so dass ich nicht weiß, wie Ihrsystem
Funktionen können auch Funktion.Ersetzen Sie alle
"
mit'
Sie und aktualisieren Sie Ihre Frage beinhalten und die Kommandozeilen-Argumente (z.B.-f file.dat
) innerhalb der Anführungszeichen wie folgt:Update:
Hier ist ein billiger trick, um zu lösen Ihr zweites problem (Typ
q
um das Programm zu beenden):C:\inp.txt
) enthält die Buchstabenq
gefolgt von der return-Charakter. Sie können diese durch öffnen Sie den Editor, Eingabeq
, die return-Taste, und speichern Sie es alsC:\inp.txt
. Diese dienen als "input"report.exe
scheint zu müssen.system
Anrufe in Ihrem code so, dass der input aus der text-Datei, die wir gerade gemacht wird an in es. Ich habe den modifizierten Aufruf oben (Bildlauf zum Ende um den Unterschied zu sehen)."C:\Program Files\CMG\IMEX\2008.10\Win32\EXE\mx200810.exe"
und"C:\Program Files\CMG\BR\2008.10\Win32\EXE\report.exe"
sind richtig?inp.txt
im"
wie gut?"C:\Users\Harpreet Harpreet\Desktop\inp.txt"
"C:\Users\Harpreet Harpreet\Desktop\inp.txt"
war ein Beispiel. Sollten Sie es ersetzen mit dem vollständigen Pfad derinp.txt
auf Ihrem Desktop. Das kann erreicht werden durch Rechtsklick auf die Datei und betrachten Sie seine Eigenschaften. Der vollständige Pfad wird neben Lage.<
sollte außerhalb"..."
seit"..."
sollte nur schließen Datei-Pfade mit Leerzeichen in Ihnen.> "C:\inp.txt"
). Dies wird dump Fehlermeldungen zu"C:\err.txt"
. Ändern Sie den Pfad, um was für Sie arbeitet.CMGfile.dat
,ReportBHP.rwd
undReportBHP.rwo
mit der vollständigen Pfade. d.h.,"C:\Some Path\ReportBHP.rwd"
; vielleicht ist die Ausgabe-Dateien werden erstellt, aber an einem anderen Speicherort.inp.txt
. Und ja,err.txt
speichern der Fehlermeldungen, kein problem 🙂CMGfile.dat,ReportBHP.rwd
undReportBHP.rwo
--- habe ich aktualisiert meine Antwort als gutq
- und die return-Taste drücken? Auch, wie hast duinp.txt
? Geben Sie mir die genauen details.Q
- und zurück-Taste --- versuchen Sie dies: download200.mediafire.com/3y00q90wtt9g/ij1m0tmijum/inp.txtmx200810.exe
, dann laufenreport.exe
hitQ
, drücken Sie return, etc. Nur geben Sie es in allen Einzelheiten so habe ich das richtige Bild.inp.txt
würde, wäre der.row
- Datei erzeugt werden?.row
Datei ist nicht erzeugt? Oder ist es einfach so, dasstextread
ist nicht in der Lage, es zu finden?.rwo
- Datei und ich habe versucht, zu duplizieren Aktionen. Ich schlage vor, Sie schauen Sie in die Dokumentationreport.exe
(was ich denke, generiert die gewünschte Datei) und sehen, was Los ist. Hast du den vollen Pfad vonReportBHP.rwo
so dass Sie wissen, wo zu suchen?.rwo
- Dateien, etc.?textread
mit dem vollen Pfad, also"C:\Documents and Settings\HSingh2\Desktop\Work\Model - SGEMS, CMG and MATLAB\ReportBHP1.rwo"
"C:\Documents and Settings\HSingh2\Desktop\Work\Model - SGEMS, CMG and MATLAB\ReportBHP1.rwd"
existiert?Verwenden beide Ausgänge erhalten den status von system-und text-Ergebnis, wenn überhaupt verfügbar sein wird.
Weiterhin dein Skript je nach
status
variable. Aufhören, wenn es über null.Wenn Ihre Parameter sind variable, die Sie erzeugen kann die Befehlszeilen-Zeichenfolge in MATLAB unter Verwendung string-Verkettung oder SPRINTF Funktion.
[status, result] = system(cmd_line)
.cmd_line
vor dem Aufrufsystem
?class(cmd_line)
, wird es zurückchar
? Versuchen Sie, Ihre Kommando-string direkt an das system-Aufruf als argument.pwd
in MATLAB. Vielleicht sollten Sie zuerst ändern Sie die workin-Verzeichnis, wo Ihre input-Dateien, die sich mitcd dirname
. Oder zählen der vollständige Pfad der input-Dateien in Befehlszeile."c:\Program Files\Windows NT\Accessories\wordpad.exe" somefilename.txt
. Versuchen Sie zunächst, es zu schaffen von der Eingabeaufforderung aus. Dann durch das system in MATLAB. Lassen Sie uns wissen, wenn es funktioniert, und wenn nicht, was werden die Fehlermeldungen.system
. Alles, was Sie geben nach ! symbol übergeben OS. Geben Sie einfach!“C:\Program Files\CMG\BR\2008.10\Win32\EXE\report.exe” –f ReportBHP.rwd –o ReportBHP.rwo
.