|
|
Probleme beim automatischen Einlesen von *.mat-Dateien |
|
Shavens |

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 18:39
Titel: Probleme beim automatischen Einlesen von *.mat-Dateien
|
 |
|
 |
|
Hallo zusammen,
ich arbeite noch nicht lange mit Matlab und arbeite mich gerade erst in die Materie ein. Deshalb entschuldigt, falls die Frage zu doof ist oder so, habe aber bei der Forensuche keine adäquate Lösung gefunden.
Es geht um folgendes:
Ich habe eine Menge *.mat Dateien vorliegen, die jeweils 120 Variablen im Workspace haben, wenn man sie aufruft, d.h. im Workspace liegen dann 120 Variablen in der Form(zB):
Temperatur
Druck
Gewicht...
Von diesen Variablen benötige ich für meine Weiterbearbeitung nur 3. Das Aufrufen soll automatisch erfolgen und mein bisheriger Code sieht folgendermaßen aus:
files = dir('D:\...\Messungen_Auswertung');
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);
for g=4:nFile;
fid = fopen(dateiname{1,nFile});
end
Nach dem ich die Datei geöffnet habe, muss ich sie doch eigentlich nur durchsuchen und meine gewünschten Variable herausziehen, sprich die Spalte finden, in der die Größe, die ich verarbeiten möchte steht.
Bisher habe ich das nur für *.txt gesehen, wo textscan(fid('%f'...); verwendet wird. Das klappt bei mir aber nicht:-(.
Also nochmal zusammengefasst: Ich würde gerne die Dateien aus dem obigen Ordner einlesen, öffnen, bearbeiten und wieder schließen.
Danke im voraus für eure Hilfe!! Sollten noch fragen sein, einfach schreiben.
Grüße
|
|
|
|
|
dmjr |

Forum-Century
|
 |
Beiträge: 199
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 18:46
Titel:
|
 |
*.mat-Dateien werden mit load geladen, fopen und co ist da nicht notwendig.
Load nimmt als Parameter zusätzlich Variablennamen an, dann wird nur ein Teil geladen.
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 19:17
Titel:
|
 |
Sprich ich erledige die Aufgabe mit:
load(Pfad);
load(Variablenname1)
load(Variablenname2)
load(Variablenname3)
...
?
|
|
|
dmjr |

Forum-Century
|
 |
Beiträge: 199
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.11.2012, 19:22
Titel:
|
 |
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 12:25
Titel:
|
 |
Sprich, ich lese die Dateien eines Ordners mit den drei Variablen, die ich benötige ein mit:
T=load(Pfad,'Temperatur');
p=load(Pfad,'Druck');
m=load(Pfad,'Masse');
Wenn ich das in einer for-Schleife ausführen lasse, wird das Ganze automatisch und nacheinander für jede in dem Ordner befindliche Datei durchgeführt...?
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 13:03
Titel:
|
 |
Also ich habe das nun wie von mir im letzten Beitrag beschrieben versucht und bekomme folgende Fehlermeldung:
Error using load
Unable to read file D:\...\Auswertung: No such
file or directory.
Verwendet habe ich folgenden Code:
Danke euch
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 16:27
Titel:
|
 |
Habe jetzt herausgefunden, dass man eine konkrete Datei angeben muss, damit mit load die gewünschte Variable eingelesen wird...Das wollte ich ja grade vermeiden. Da ich in dem Ordner ca. 400 Messungen habe, sollte es so sein, dass ich nur den Ordner angebe und die Dateien bzw. die drei in den Dateien enthaltenen Variablen eingelesen werden, um sie zu verarbeiten...
Könnt ihr mir damit vielleicht helfen?
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 18:22
Titel:
|
 |
Hallo Shavens,
Der Code ist schon fast korrekt.
Das wäre einfacher:
Gruß, Jan
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 20:23
Titel:
|
 |
Zitat: |
for g = 1:nFile % Wieso war das *4*:nFile ?!
|
Die ersten drei Dateien im Ordner sind andere Mat-Dateien, die nicht geladen werden sollten, zB Funktionen...
Dein Tipp hat mir sehr geholfen, nur leider bekommen ich nun folgende Fehlermeldung:
Error using load
Number of columns on line 5 of ASCII file D:\...\Auswertung\Probe.asv
must be the same as previous lines.
(Probe ist der Name meines Skriptes)
Die Fehlermeldung bezieht sich auf die line, in der ich die erste Variable einlesen möchte. Was ich jetzt nicht verstehe ist, was ein ASCII-File da zu tun hat, bzw warum er eine Datei Probe.asv einlesen möchte (oder was auch immer).
Dankeschön
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 23:42
Titel:
|
 |
Hallo Shavens,
die Funktion dir listet alle Dateien im Verzeichnis auf, nicht
nur .mat-Dateien.
wäre da besser. Die Reihenfolge der Dateien ist im übrigen nicht fest
vorgegeben. Du solltest also die 4 nicht gewollten Dateien nach dem
Namen ausfiltern.
Man kann bei auch mehrere Variablen auf einmal laden:
Grüße
Sirius
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.11.2012, 23:46
Titel:
|
 |
Hallo Shavens,
Zitat: |
...warum er eine Datei Probe.asv einlesen möchte (oder was auch immer). |
Genau das "was auch immer solltest Du herausfinden.
Entweder ein TRY/CATCH einsetzen und eine Fehlermeldung produzieren. Oder per Debugger Matlab beim Fehler stoppen lassen, um die Werte der lokalen Variablen zu lesen:
Gruß, Jan
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.11.2012, 00:09
Titel:
|
 |
Hallo,
habe eure Tipps versucht nachzuvollziehen, aber es klappt immernoch nicht. Er sagt mir ja quasi wortwörtlich in der Fehlermeldung, dass die Spalten der eingelesenen Dateien die gleiche Länge haben müssen wie die folgenden...Das ist ja aber ganz logisch bei mir nicht so, weil ich das ja auch überhaupt nicht möchte. Statt 120 Variablen brauche ich ja nur die 3.
Bin verwirrt:-(.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.11.2012, 00:23
Titel:
|
 |
Hallo,
welchen Code genau versuchst du denn auszuführen?
Kann es sein, dass die .asv-Datei eine zusätzliche Datei ist, die deine Zählweise (ab der 4. soll eingelesen werden) durcheinander gebracht hat?
Siehe dazu auch den Vorschlag von Sirius3 - dann kann es zu deinem Problem eigentlich nicht kommen.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 22.11.2012, 10:32
Titel:
|
 |
Hallo Shavens,
Zitat: |
Er sagt mir ja quasi wortwörtlich in der Fehlermeldung, dass die Spalten der eingelesenen Dateien die gleiche Länge haben müssen wie die folgenden |
Im Forum ist es hilfreich, wenn Du den Code postest und eine vollständige Kopie der Fehlermeldung. Eine ungefähre Beschreibung klärt meistens nichts.
Ich vermute, wenn Du alle Vorschläge aus diesem Thread benutzt hast, fehlen nur noch Kleinigkeiten, die wir leicht verbessern können, wenn wir sie sehen.
Gruß, Jan
|
|
|
Shavens |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 31
|
 |
|
 |
Anmeldedatum: 20.11.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.11.2012, 10:44
Titel:
|
 |
|
 |
|
Mein bearbeiteter Code lautet:
Die Fehlermeldung lautet:
Error using load
Number of columns on line 2 of ASCII file D:\Fabi Uni\Projektarbeit
IFF\MessungenDQ500_Auswertung\einschwingzeit.m
must be the same as previous lines.
Error in AProbe (line 16)
T=load(aFile,'Temperatur');
Das mit den *.mat-Files funktioniert nicht, da auch mein Skript, dass ich ausführen möchte (AProbe.m) eine mat-Datei ist und sich ja in dem Ordner befinden muss...
Zitat: |
Entweder ein TRY/CATCH einsetzen und eine Fehlermeldung produzieren.
|
Hab ich versucht, bekomme da eine Fehlermeldung, weil ich es glaube ich nicht richtig anwenden kann.
Es ist jetzt so, dass er die Dateien schon einliest (die Länge der letzten Variablen entspricht deren der letzten Dateien), nur die Strukture der Datei ist verändert, was glaub ich zum Problem führt:
Als Beispiel hat die Variable Temperatur die Structure 1891x1 double, mit meinem Skript lade ich ein field mit der Structure 1x1, worauf ich nicht zugreifen kann.
Wie kann ich es erreichen, dass ich nicht ein field mit 1x1 einlese, bzw wie kann ich darauf zugreifen?
Wirklich vielen Dank
|
|
|
|
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.
|
|