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

Probleme beim automatischen Einlesen von *.mat-Dateien

 

Shavens
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 18:39     Titel: Probleme beim automatischen Einlesen von *.mat-Dateien
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 18:46     Titel:
  Antworten mit Zitat      
*.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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 19:17     Titel:
  Antworten mit Zitat      
Sprich ich erledige die Aufgabe mit:

load(Pfad);
load(Variablenname1)
load(Variablenname2)
load(Variablenname3)
...
?
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 19:22     Titel:
  Antworten mit Zitat      
Zum Beispiel:
A=load(Pfad,'A');

Siehe Doku: http://www.mathworks.de/de/help/matlab/ref/load.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 12:25     Titel:
  Antworten mit Zitat      
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...?
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 13:03     Titel:
  Antworten mit Zitat      
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:

Code:

files = dir('D:\...\_Auswertung');
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);

for g=4:nFile;
    %A=load(''D:\...\_Auswertung');
    a=load('D:\...\_Auswertung','Temperatur');
    b=load('D:\...\_Auswertung','Druck');
    c=load('D:\...\_Auswertung',Gewicht');
end
 

Danke euch
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 16:27     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.11.2012, 18:22     Titel:
  Antworten mit Zitat      
Hallo Shavens,

Der Code ist schon fast korrekt.
Code:
folder = 'D:\...\_Auswertung';
files = dir(folder);
files([files.isdir]) = [];   % Remove folders
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);

for g = 1:nFile   % Wieso war das *4*:nFile ?!
    aFile = fullfile(folder, dateiname{g});
    a=load(aFile,' Temperatur');
    b=load(aFile, 'Druck');
    c=load(aFile, Gewicht');
end

Das wäre einfacher:
Code:
Data = load(fullfile(folder, dateiname{g}));
a = Data.Temperatur;
...

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 20:23     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 23:42     Titel:
  Antworten mit Zitat      
Hallo Shavens,

die Funktion dir listet alle Dateien im Verzeichnis auf, nicht
nur .mat-Dateien.
Code:
files = dir('D:\...\_Auswertung\*.mat');

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:
Code:
folder = 'D:\...\_Auswertung\';
files = dir([folder '*.mat');
Data = struct('Temperatur',{},'Druck',{},'Gewicht',{});

for file = files
    Data(end+1) = load(fullfile(folder, file.name),'Temperatur','Druck','Gewicht');
end



Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.11.2012, 23:46     Titel:
  Antworten mit Zitat      
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:
Code:


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 00:09     Titel:
  Antworten mit Zitat      
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:-(.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.11.2012, 00:23     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.11.2012, 10:32     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Shavens
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 10:44     Titel:
  Antworten mit Zitat      
Mein bearbeiteter Code lautet:

Code:

folder='D:\...\Auswertung';
files = dir(folder);
files([files.isdir]) = [];
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);

for g=4:nFile;
    aFile = fullfile(folder, dateiname{g});
       
   
    T=load(aFile,'Temperatur');
    Masse=load(aFile,'Gewicht');
    t=load(aFile,'Zeit');
   
       
end
 


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.