|
|
Vorgänge mit Skripten automatisieren? |
|
Boromir05 |

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.08.2016, 15:12
Titel: Vorgänge mit Skripten automatisieren?
|
 |
|
 |
|
Hallo,
Ich werte zurzeit Daten aus (nur Post-Processing).
Das sind 35 Datenreihen, die ich jeweils separat über ein .mat file in MatLab einlesen kann. Über das .mat file werden dann sehr viele Parameter eingelesen.
Ich lese also so ein File ein und führe dann ein Skript aus. Dieses gibt mir z.B. einen Mittelwert aus, den ich händisch in eine Excel Tabelle eintrage. Außerdem wird ein Plot erstellt, den ich manuell als png in einem Ordner speicher und mit einem Dateinamen versehe, der im wesentlichen dem Namen des .mat-files entspricht (+kleines Anhängsel).
Dann führe ich ein ähnliches Skript aus und verfahre ebenso damit.
Es ist sehr (zeit-)aufwändig, diesen Vorgang für jede Messung einzeln durchzuführen...
Ich bin also für jede Hilfe dankbar, wie man das (teilweise) automatisieren könnte...
- .mat-file in MatLab einlesen (Import Manager)
- Skript ausführen
- ausgegebenen Wert in Excel Tabelle kopieren
- Plot als Grafik speichern
Als weiteren Punkt (wohl eher ein Excel-Ding):
Die Zahlen in MatLab haben ja einen Punkt als Trennzeichen. Wenn ich nun z.B. den Wert 113.3523 nach Excel kopiere, dann wird daraus 1.133.523...
Beholfen habe ich mir damit, die Werte in Excel dann mit 10000 zu multiplizieren und die Ergebnisse dann in eine neue Spalte kopiert.
Sehr umständlich... und problematisch, wenn man eine Zahl wie "0.4648" hat. Die erkennt Excel dann gar nich als Zahl^^
Alternativ kann man auch die Zellen als Text formatieren, in die man später die Zahlen kopiert. Dann über Suchen&Ersetzen die Punkte durch Kommata ersetzen und die Zellen wieder als Zahl formatieren.
Was für ein Aufwand. Und bestimmt unnötig, wenn man die richtigen Kniffe kennt.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.08.2016, 17:06
Titel:
|
 |
Hallo,
sollte kein allzu großes Problem sein, das zu automatisieren.
1. mit
dir
eine Liste der Dateien bzw. Dateinamen erzeugen. Dazu gibt es hier und generell im Internet jede Menge Beispiele.
2. for-Schleife über
a. Datei laden mit
load
b. Ausführen des Skripts über Dateiname. Allerdings wäre es besser, das Skript in eine Funktion umzuwandeln.
c.
xlswrite
d.
saveas
Grüße,
Harald
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 09:22
Titel:
|
 |
Moin Harald und danke für deine Antwort!
Leider hapert es bei mir schon daran, das Skript in eine Funktion umzuwandeln
Ich probiere jetzt seit anderthalb Stunden, dass die Funktion auf die Variablen im Workspace zugreift.
Angenommen ich möchte die Variablen a und b aus dem workspace in der Funktion function1( a_f , b_f ) benutzen.
Das Anwenden funktioniert, wenn ich function(a,b) im command window eingebe.
Wie aber kann ich das gleiche Ergebnis erreichen, ohne dass ich die Werte als Eingangsparameter definieren muss?
Wie kann ich außerdem erreichen, dass das Ergebnis als Variable in den Workspace geschrieben wird?
MatLab ist soo umfangreich... und ich scheiter an den basics.
Selbst das, was man schonmal wusste vergisst man auf Dauer wieder, wenn man es nicht anwendet.
Zuletzt bearbeitet von Boromir05 am 11.08.2016, 09:34, insgesamt einmal bearbeitet
|
|
|
Supertyp |

Forum-Fortgeschrittener
|
 |
Beiträge: 85
|
 |
|
 |
Anmeldedatum: 09.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014a
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 09:31
Titel:
|
 |
Mit
und
kannst du aus Funktionen auf den Base Workspace zugreifen. Aber Vorsicht: diese Befehle sind bei den Experten hier verpönt.
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 09:34
Titel:
|
 |
Danke! Das schaue ich mir gleich mal an.
edit:
Top, läuft!
Jetzt versuche ich mir den Rest zusammenzubasteln... Ich melde mich bestimmt gleich wieder
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 10:39
Titel:
|
 |
Hallo,
SuperTyp hat dich zwar auf
evalin
und
assignin
hingewiesen, aber auch darauf, dass es keine gute Idee ist, sie zu verwenden.
Es ist nun einmal Sinn einer Funktion, dass man Eingabeargumente übergibt. Wenn du das aus welchen Gründen auch immer absolut nicht möchtest, kannst du auch gleich bei einem Skript bleiben.
Grüße,
Harald
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 13:12
Titel:
|
 |
|
 |
|
Okay. Dann probiere ich es lieber ohne evalin und assignin. Aber nice2know.
Bevor ich die for-Schleife bastel, versuche ich mich erstmal an den einzelnen Schritten.
Das Öffnen einer einzelnen (spezifischen Datei) geht.
Jetzt müsste ich noch wissen, wie ich meiner Schleife dann beibringe, die Dateien hintereinander einzulesen. Ohne dass man den Dateinamen eingeben muss.
à la "Öffne die Daten1 - führe Berechnung usw. aus - öffne die Daten2 - ... etc
Real sind die Messdaten leider nicht schön durchnummeriert, sondern mit Datum usw. versehen. Sonst könnte ich da (äquivalent zur Lösung ganz unten) mit
'Daten' num2str(n) '.mat'
arbeiten.
Das Ausführen der Funktion und Speichern des Ausgabewertes in Excel läuft auch.
Die Messdaten habe ich jetzt in einem Ordner "Ordner1" in meinem current folder abgelegt.
dieses Skript lädt die benötigten Variablen aus der Datei, führt damit die Funktion aus und speichert den Ausgabewert in der Excelabelle auf der ersten Seite im Feld B1.
Schön wäre, wenn ich in A1 den Dateinamen (im Beispiel: "Daten1") hinterlegen könnte
Damit komme ich zwar an den Namen "Daten1.mat", den schreibt er mir in meine Exceltabelle aber Buchstabe für Buchstabe in jeweils eine neue Zelle.
Was ich merkwürdig finde:
gibt mir zwar die Dateinamen der im Ordner enthaltenen Datein aus, aber noch 2 Werte mehr:
z.B.:
. .. Daten1.m Daten2.m Daten3.m
Was sollen die Punkte?
------------------------------------------------------
For Schleife und Schreiben in Excel: <--- erledigt
Es sollen ja nacheinander die Zellen ausgefüllt werden.
Ergebnis von Daten1 in B1, von Daten2 in B2 usw.
Wie regel ich das mit der Schleife?
'Bn' kann ich ja nicht als Ziel vorgeben. Dann spuckt er das Ergebnis nämlich in Zelle BN1
Ich müsste evtl. in meiner Schleife jeweils eine Variable An definieren. Also den Buchstaben "A" und dahinter die "Zahl n" der Schleife...
Wäre jetzt meine Idee. Ohne Ahnung wie man das umsetzt -.-
edit: der letzte Punkt hat sich hiermit erledigt:
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 15:52
Titel:
|
 |
Das Namenproblem habe ich jetzt mit den geschweiften Klammern gelöst:
Mit den Bezeichnungen kenne ich mich nicht aus, aber im Workspace hat die Variable jetzt "{}" und nicht mehr "ab" als Symbol.
Bei Ausgabe ist der Dateiname nun 'Daten1'. Vorher ohne Striche.
Bleibt noch die Frage übrig, wie ich die Datenreihen hintereinander öffne ohne die spezifischen Namen eingeben zu müssen.
und die Sache mit den Punkten (die nicht so wichtig ist, da ich sie bei der Namensbestimmung mit n+2 berücksichtigen kann):
gibt mir zwar die Dateinamen der im Ordner enthaltenen Datein aus, aber noch 2 Werte mehr ( . und .. ):
z.B.:
. .. Daten1.m Daten2.m Daten3.m
Was sollen die Punkte?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 11.08.2016, 21:11
Titel:
|
 |
Hallo,
. ist das momentane Verzeichnis, .. das übergeordnete - also so, wie der dir-Befehl auf Betriebssystemebene funktioniert.
Wenn du nur bestimmte Dateien haben möchtest, dann gib das am besten an:
Grüße,
Harald
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2016, 07:54
Titel:
|
 |
Moin Harald,
Danke dafür! Die Anzeige auf die .mat Dateien zu beziehen, da hätte ich eigentlich auch selber drauf kommen können...
In deinem Code hast du das ' hinter '*.mat vergessen.
Ist es möglich, mit dem load Befehl (oder anders) die erste (zweite, dritte usw) Datei zu öffnen? Also dass man nicht den Namen der Datei eingeben muss?
Alternativ würde ich die Dateien durchnummerieren und dann über die Indexvariable der Schleife darauf zugreifen. (Aber das wird doch auch anders gehen, oder?)
In letzterem Fall heißen die Daten dann:
*001.mat
*002.mat
...
*n.mat
eine Datei zu öffnen habe ich nun mit diesem Code versucht:
??? Error using ==> load
Unable to read file .mat: Invalid argument.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2016, 09:24
Titel:
|
 |
Hallo,
den entsprechenden Ansatz hattest du eigentlich schon:
Grüße,
Harald
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2016, 10:33
Titel:
|
 |
Jawoll, so läuft´s!
Den Ansatz haben und auch verstehen, was man da zusammenkopiert und drin rumwurschtelt sind leider zwei unterschiedliche Paar Schuhe
Ich habe das Ganze jetzt noch etwas beschleunigt, indem ich in der Schleife die Ergebnisse in eine Matrix schreibe um das Schreiben in Excel aus der Schleife rauszunehmen.
Das fertige Beispiel:
Die quasi Doppelung von Name und Name2 ist wahrscheinlich noch unnötig. Aber die geschweiften Klammern sind notwendig, damit die Zeichen des Dateinamens in Excel nicht jeweile in eine eigene Zelle geschrieben werden. Auf jeden Fall funktioniert es so
Dankeschön!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.08.2016, 10:53
Titel:
|
 |
Hallo,
kleine Vorschläge:
- statt Name2 zu definieren, kann man auch {Name} verwenden.
- ans weiterzuverwenden kann schnell verwirren und ist daher unüblich. Besser wäre:
Grüße,
Harald
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2016, 12:05
Titel:
|
 |
mit {} hast du natürlich Recht. Das hatte ich schonmal probiert; das ging aus irgendeinem Grund aber nicht.
Wahrscheinlich war das nur ein Zeichen-Fehler in meinem Skript.
Deshalb dieser Umweg.
Jetzt habe ich beide Vorschläge umgesetzt.
Danke für die vielen Tipps und die Hilfe hier!
Falls ich später noch versuchen sollte, die Plots automatisiert abzuspeichern, melde ich mich bestimmt nochmal
|
|
|
Boromir05 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 08.08.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2016, 12:40
Titel:
|
 |
Plots speichern funktioniert übrigens super!
Noch eine kleine Nachfrage:
ich möchte Ergebnisse gern sortiert nach Name in Ordner speichern.
also à la: Wenn der Name " Inhalt1 " enthält, dann soll in Ordner1 gespeichert werden.
ich komme aber nicht auf die benötigte if-Bedingung. Probiert habe ich:
sprich: wie bekomme ich z.B. die isequal-Funktion mit Platzhaltern (*) zum Laufen?
oder: mit welcher alternativen Funktion ist das machbar.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|