|
|
wie kann ich eine mat file laden??? |
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 28.09.2010, 16:08
Titel:
|
|
|
|
|
Hallo,
bin ein Neuling mit Matlab. Mein Problem ist aehnlich bzw. gleich wie schon hier beschrieben.
Jedoch noch ein wenig umfangreicher...
Mit meinem Bruchstueck von einem Programm bin ich schon in der Lage Variablen einzeln aus einem .mat-File zu laden. Jedoch muss ich dazu jede Datei einzeln anklicken und jede Variable einzeln beschreiben.
Mein Ziel ist es diesen Vorgang zu automatisieren und dynamisch an den Inhalt der Ordner anzupassen.
Dabei sind meine Messdaten wie folgt gespeichert
C:\...Desktop\Messdaten\Data\0001\9.mat
...
C:\...Desktop\Messdaten\Data\0056\9.mat
Dabei wuerde ich gern den Pfad bis zum Ordner 'Data' von Hand auswaehlen und den Rest MATLAB machen lassen.
Dabei soll mein Programm nacheinander die Ordner abarbeiten. Zunaechst in den Ordner 0001 und die Datei 9.mat laden. Aus dieser Datei alle vorhandenen Variablen in den Workspace laden und mein XY-Algorithmus(noch in Arbeit) durchlaufen -> speichern und dann aus dem Ordner 0002 die Datei 9.mat laden...Wiederholung wie bei 0001
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 04.10.2010, 14:27
Titel:
|
|
Hallo
nur ein paar Tipps:
1) in deinem Fall statt UIGETFILE UIGETDIR verwenden, damit kannst den Ordner bis der Stelle
C:\...Desktop\Messdaten\Data\
2) Danach mit DIR arbeiten
3) Noch währen hilfreich FULLFILE
Lese erstmal Hilfe zu Befehlen, probiere selbst und wenn nicht klappt hier wieder fragen
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 04.10.2010, 20:08
Titel:
|
|
Hallo,
vielen Dank fuer die Tipps.
Das Laden der Daten funktioniert soweit. D.h. im workspace werden alle Variablen angezeigt und ich kann diese verwenden.
Da ich eine Matrix aus allen Variablen des Workspace machen moechte, suche ich nun noch nach einer Loesung. Die Loesung in dem ich jede Variable einzeln eintippe geht zwar, aber ich moechte das dies MATLAB uebernimmt.
Das ist diese einzeln-eintip-Loesung:
D=[hz1; hz2; vl; vr; hl;...];
Im Workspace befindet sich q_KEY, welche alle Variablennamen beinhaltet.
q_KEY =( hz1 hz2 vl vr hl ...)
Ich habe es schon versucht ueber length(q_KEY) und einzelnes ansprechen von q_KEY die Variablen zu speichern, aber das Problem ist, dass darin jeder Buchstabe einzeln angesprochen werden muss.
Ich moechte das MATLAB q_KEY(1,1) = hz1 herausgibt, aber MATLAB spuckt mir q_KEY(1,1) = h heraus.
Weis jemand weiter?
Danke!
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2010, 06:54
Titel:
|
|
Hi!
Also das sind ja quasi zwei Fragen in einer.
Als erstes mal zu deinem q_Key:
Am besten legst du dir ein Variable q_Key vom Datentyp "cell" an. Das sieht dann so aus:
Dann bekommst du folgendes:
Für deinen zweiten Fragenteil:
Du könntest dir z.B. eine for-Schleife zu Hilfe nehmen und die in der Hilfe mal die Funktion eval() ansehen. Damit sollte dein Problem zu lösen sein.
Schöne Grüße
Micha
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 05.10.2010, 15:11
Titel:
|
|
Hi Micha,
danke fuer die Antwort. Aber diese cell muss ich ja ebenfalls wieder von Hand eingeben, oder verstehe ich das grad falsch?
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.10.2010, 07:27
Titel:
|
|
Naja, nicht unbedingt. Ich gehe jetzt mal davon aus, dass deine Variablen so heißen, wenn du sie aus den .mat-Files lädst, richtig?
Und das Laden machst du ja per
Die Variable inhalt_mat ist eine Struktur und inhalt_mat.hz1 ist deine Zielvariable. Mit Hilfe von
kannst du die Variablennamen extrahieren und in q_Key als cell speichern bzw. daran anhängen.
Aber du könntest dir diesen Zwischenschritt auch sparen:
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 06.10.2010, 13:10
Titel:
|
|
cool, genau so etwas habe ich gesucht! Herzlichen Dank!!
Die Variablen die Ich verarbeite lade ich aus dem .mat-File. Dabei entsteht beim Laden diese 'q_KEY'-Variable, welche die Namen der Variablen beinhaltet.
Da ich die Namen spaeter zur Indizierung der neuen Variablen nutzen moechte, waere es nicht schlecht wenn ich auch die Namen wie die Werte anprechen koennte.
Also wie
moechte ich dann mit
auslesen.
Mit
kann ich zwar die Buchstaben auslesen, jedoch muss ich dabei vorher wissen wo die Bezeichnung beginnt und endet.
Dabei waere ich wieder ein mal bei der manuellen Eingabe. Ich denk das dies aber ebenfalls automatisiert machen kann, ich wei= nur nicht wie?
Danke!
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.10.2010, 13:26
Titel:
|
|
*kopfkratz*
Öhhh... Was hast du vor? Ich versteh's grad nicht.
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 06.10.2010, 14:37
Titel:
|
|
oh sorry,
ich versuchs ein wenig allgemeiner zu halten.
Also es befinden sich im workspace Variablen (hz1, hz2, vl, vr, hl, hr, sys1, sys2, ...). Diese werden mit meinem xy-Script-file bearbeitet. (dabei wird der Inhalt der variable untersucht und aufgetrennt). Waehrend einer Schleife moechte ich meine neuen Daten unter dem alten Namen speicher jedoch mit dem Zusatz in welcher Schleife diese erzeugt wurde.
bsp.
vl wird geladen, verarbeitet und nun als vl_1 gespeichert, Schleife 2 -> Variable wird als vl_2 gespeichert...
Um das zu realisieren bin ich der Meinung, dass ich die Variablennamen einzeln ansprechen muss um diese weiter zu verwenden.
Ich hoffe es ist nun ein wenig verstaendlicher.
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.10.2010, 14:55
Titel:
|
|
Also so ganz hab ich das immer noch nicht kapiert. Vielleicht schreibst du mal ein wenig Code, so wie du es machen würdest. Dann kann man immernoch gucken, was man verbessern kann.
Ich versuchs trotzdem mal. Ich hoffe, ich liege richtig.
Also zum einen kannst du die mal die Funktion eval() angucken. z.B.:
Oder du legst deine Ergebnisse in eine Struktur. Deren Felder kann man auch dynamisch ansprechen:
Ist es das, was du suchst?
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 06.10.2010, 15:50
Titel:
|
|
danke fuer deine Zeit und Muehe. Ich lad mal den code hoch:
Hier lade ich meine Daten (funktiniert so weit ganz gut)
Hier bekomme ich die Laenge einer Variable und die Anzahl der Variablen die ich benoetige.
Hier nun die Schleife, welche sich in einer weiteren Schelife befindet.
Ich moechte das gleiche wie bei VARs{c}(in dem ich damit die Werte der einzelnen Variablen abrufe) nun mit q_KEY{c} haben. Damit moechte ich die einzelnen Namen der Variablen abrufen.
in dieser oben aufgefuehrten Schleife soll nun folgendes erzeugt werden:
vl_1
hl_1
vr_1...
dann wird m erhoeht, das Programm xy lauft erneut und landet nun wieder in dieser ^^ Schleife und speichert nun die Werte als:
vl_2
hl_2
vr_2...
m=m+1 -> Programm xy ->
vl_3
hl_3
vr_3...
Hierbei sollen die Namen vl, hl, vr,... ausgelesen werden, eben ueber q_KEY{c}
Edwin
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 07.10.2010, 14:56
Titel:
|
|
Hallo,
also ich hab mir jetzt etwas zusammengeschustert. Ein Problem besteht aber immer noch.
In der Variable Fkt_ speichere ich den Variablennamen aus q_KEY
D.h. in Schleifendurchgang Nummer 1 ist in
gespeichert.
Nun moechte ich mit dem folgenden Befehl die Werte dieser Variable zuweisen.
Dieser Befehl macht genau das was ich moechte - das Problem liegt nur darin, dass er Fkt_ als Variablenname nimmt ansatt hz1.
Also als Ergebnis bekomme ich
Also wie kann ich nun im eval-Befehl meine Variable hz1 aus Fkt_ auslesen lassen? sodass ich als Ausgabe folgendes bekomme
Danke!
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.10.2010, 15:00
Titel:
|
|
Naja, das ist einfach:
|
|
|
Edwin |
Forum-Anfänger
|
|
Beiträge: 31
|
|
|
|
Anmeldedatum: 27.09.10
|
|
|
|
Wohnort: Charleston, SC
|
|
|
|
Version: 2009b
|
|
|
|
|
|
Verfasst am: 07.10.2010, 16:02
Titel:
|
|
herzlichen Dank fuer die schnelle Antworten!
Ach, na sowas nur die Hochkommata...vielen Dank!
Bloederweise bin ich ebenfalls davon ausgegangen das der Unterstrich von Fkt_ uebernommen wird. Macht MATLAB natuerlich nicht, ist ja so als Variable gepeichert.
Der besseren Uebersicht halber wuerde ich halt doch gern hz1_1 erhalten.
Das muesste ich ja hier schon deklarieren:
Nun komme ich auch nicht darauf. Hast du so ein Befehl ebenfalls parat?
Edwin
|
|
|
michai |
Forum-Fortgeschrittener
|
|
Beiträge: 83
|
|
|
|
Anmeldedatum: 22.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.10.2010, 06:56
Titel:
|
|
|
|
|
Eieiei, ich habe das Gefühl ich muss hier erstmal ein paar grundsätzliche Zusammenhänge erklären:
Also: Was passiert hier?
Die Eval()-Funktion erwartet eine String (Zeichenkette), die einem Befehl entspricht, wie man ihn z.B. auf der Kommandozeile eingeben würde. Die beiden folgenden Zeilen sind also identisch
Um jetzt eine Dynamik da rein zu bringen wie du sie benötigst müssen wir uns den String also entsprechend zusammenbauen. Dazu nutzen wir die Möglichkeit der Verkettung. (Es gäbe noch zig andere Wege z.B. mittels strcat() oder sprintf(), aber hier passt die Verkettung schon.) So kann man Textteile zusammenfügen.
Manche dieser Textteile sollen ja nun dynamisch sein, müssen also durch Variablen ersetzt werden.
So kannst du dir beliebige Befehle in einer Zeichenkette zusammenbasteln, die dann mit eval() wie ein eingetippter Befehl ausgeführt werden.
Zum Üben, und damit man beim Denken nicht so einen Knick im Kopf bekommt, macht es vielleicht Sinn, das Erstellen des Befehls und den Aufruf von eval() zu trennen und in zwei Schritten auszuführen.
Schöne Grüße
Micha
|
|
|
|
Gehe zu Seite Zurück 1, 2, 3 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.
|
|