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
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 11:00     Titel:
  Antworten mit Zitat      



Dieser Artikel existiert nicht oder nicht mehr auf dem Amazon-Server.
Das Debugging ergibt folgendes Ergebnis:

In uiopen at 177
In AProbe at 17 %hier steht der erste load befehl
Warning: The value of local variables may have been changed to match the
globals. Future versions of MATLAB will require that you declare
a variable to be global before you use that variable.
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, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist weiterhin, dass du versuchst, Dateien einzulesen, die keine .mat-Dateien sind.

Zitat:
Das mit den *.mat-Files funktioniert nicht, da auch mein Skript, dass ich ausführen möchte (AProbe.m) eine mat-Datei ist

Dein Skript ist, wie du schon sagst, eine .m-Datei. Damit kann es keine .mat-Datei sein!

Zitat:
Es ist jetzt so, dass er die Dateien schon einliest

Ja, was denn nun?
Kein Einlesen, dann Fehlermeldung?
Teilweises Einlesen, dann Fehlermeldung?
Vollständiges Einlesen, dann Fehlermeldung?

Zitat:
Als Beispiel hat die Variable Temperatur die Structure 1891x1 double

Ist die Variable aufgebaut, oder ist es eine skalare Struktur?

Zitat:
mit meinem Skript lade ich ein field mit der Structure 1x1, worauf ich nicht zugreifen kann.

Warum nicht?

Bitte berücksichtige, dass wir nicht sehen können, was du siehst oder machst. Wir sind daher auf möglichst klare, eindeutige Beschreibungen dessen angewiesen.

Mit dem Debugging mit "dbstop if error" landest du tief im Code. Es kann besser sein, einen Haltepunkt in die problemhafte Zeile zu setzen und sich dann die Variablen anzusehen. Bei for-Schleifen können ein oder mehrere dbcont nötig sein, um an die Stelle zu kommen, wo das Problem wirklich auftritt. Alternative ist ein "conditional breakpoint" (Strich vor Zeile rechtsklicken)

Grüße,
Harald
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, 12:33     Titel:
  Antworten mit Zitat      
Zitat:

das Problem ist weiterhin, dass du versuchst, Dateien einzulesen, die keine .mat-Dateien sind.
Dein Skript ist, wie du schon sagst, eine .m-Datei. Damit kann es keine .mat-Datei sein!


Ich habe versucht wie Sirius es geraten hat den Pfad in
Code:

folder='D:\...\Auswertung\*.mat';
 

zu ändern. Daraufhin kommt die Fehlermeldung:

Error using load
Unable to read file D:\...\Auswertung\*.mat\Dateiname.mat: Invalid argument.

Zitat:

Ist die Variable aufgebaut, oder ist es eine skalare Struktur?

Die Frage habe ich leider nicht richtig verstanden. Also es handelt sich um einen Vektor, der (wie in meinem Beispiel zuvor) 1891 einträgen.

Zitat:

mit meinem Skript lade ich ein field mit der Structure 1x1, worauf ich nicht zugreifen kann.

Warum nicht?


Habe jetzt versucht, mit der Variable zu arbeiten und bekomme dann folgende Fehlermeldung:


Undefined function 'mrdivide' for input arguments of type 'struct'.

Des weiteren ist mir bekannt, dass die Dateien die Form zB 1x48 char aufweisen.

Zitat:

Ja, was denn nun?
Kein Einlesen, dann Fehlermeldung?
Teilweises Einlesen, dann Fehlermeldung?
Vollständiges Einlesen, dann Fehlermeldung?


Wenn ich das Skript durchlaufen lasse, ist das letzte Ergebniss die Variablen der letzten Datei im Ordner, von daher gehe ich davon aus, dass er die *.mat Dateien einliest...Hab versucht einen conditional breakpoint zu setzen aber damit konnte ich leider nicht richtig was anfangen:-(.

Ich hoffe ich konnte es etwas genauer beschreiben, falls nicht einfach fragen.

Vielen Dank für die Hilfe
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, 14:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Error using load
Unable to read file D:\...\Auswertung\*.mat\Dateiname.mat: Invalid argument.


Du siehst ja, was MATLAB hier fälschlicherweise versucht. Dann musst du es eben nur so anpassen, dass MATLAB das versteht.
Da ich jetzt wieder nicht weiß, was "folder" bei dir ist und wie du es weiter verwendest, kann ich dir da nicht weiterhelfen.

Zitat:
Habe jetzt versucht, mit der Variable zu arbeiten und bekomme dann folgende Fehlermeldung:
Undefined function 'mrdivide' for input arguments of type 'struct'.

Das heißt, dass du zunächst das Feld extrahieren musst:
Code:
variable.feldname

Sollte aber nun wirklich bekannt sein, wenn man sich auch nur ein kleines bisschen mit Strukturen auseinandergesetzt hat.

Grüße,
Harald
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, 15:01     Titel:
  Antworten mit Zitat      
Zitat:

Du siehst ja, was MATLAB hier fälschlicherweise versucht. Dann musst du es eben nur so anpassen, dass MATLAB das versteht.
Da ich jetzt wieder nicht weiß, was "folder" bei dir ist und wie du es weiter verwendest, kann ich dir da nicht weiterhelfen.


Hier mein Teil des Codes, den es betrifft:

Code:

folder='D:\...\Auswertung';
files = dir(folder);
 


Muss ich da um das *.mat noch Klammer setzen oder so? Hab es nicht hinbekommen.-(

Auf den Tipp von Sirius hab ich folgendes versucht:
Code:

folder='D:\...\Auswertung';
files = dir([folder ('*.mat')]);
 


Sirius-Tipp war:
Code:

files = dir('D:\...\_Auswertung\*.mat');
%beziehunsweise
folder = 'D:\...\_Auswertung\';
files = dir([folder '*.mat');
 
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, 16:00     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Hier mein Teil des Codes, den es betrifft


Ist das wirklich der gesamte Teil, den es betrifft? Hast du nicht später noch folgendes drin?
Code:
aFile = fullfile(folder, dateiname{g});


fullfile hängt die Bestandteile aneinander. Für diese Zwecke darf folder dann natürlich kein '*.mat' enthalten.
Mit sirius' Tipp sollte das aber auch nicht passieren, deine Fehlermeldung deutet jedoch darauf hin.

Dann sieht es so aus:
Code:

folder='D:\...\Auswertung\'; % <-- kleiner Fehler: \ fehlte
files = dir([folder '*.mat']);
dateiname = {files.name};
nFile = length(dateiname);

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

Grüße,

Harald

Zuletzt bearbeitet von Harald am 22.11.2012, 16:23, insgesamt einmal bearbeitet
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, 16:14     Titel:
  Antworten mit Zitat      
So hatte ich es schon und es passiert nun leider gar nichts mehr...

Es werden keine Dateien geladen und auch die Variablen dateiname, g etc. sind leer.

Zitat:

fullfile hängt die Bestandteile aneinander. Für diese Zwecke darf folder dann natürlich kein '*.mat' enthalten.


Ich möchte doch gerade die '*.mat' files einlesen, die '*.m* files sind das Problem...

Mein Code:

Code:

folder='D:\...\Auswertung';
files = dir([folder '*.mat']);


files([files.isdir]) = [];
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);

for g=1:nFile;
   
    aFile = fullfile(folder, dateiname{g});
 


Zuletzt bearbeitet von Shavens am 22.11.2012, 16:25, insgesamt einmal bearbeitet
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, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
So hatte ich es schon und es passiert nun leider gar nichts mehr...

Ja, da fehlt ein \. Den habe ich im vorherigen Beitrag eingefügt.

Zitat:
Ich möchte doch gerade die '*.mat' files einlesen

Das ist mir schon klar. Es ging mir auch darum, dein Problem von 13:05 zu addressieren, wo das '*.mat' ja offensichtlich einmal zuviel drin war.

Grüße,
Harald
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, 16:27     Titel:
  Antworten mit Zitat      
Wirklich danke, dass du mir hilfst und ich möchte auch wirklich nicht nerven. Hab halt nicht so viel Plan und bin damit ziemlich allein gelassen worden und habe nun etwas Zeitdruck...
Habe es korrigiert und bekomme nun folgende Meldung:

Error using dir
Function is not defined for 'double' inputs.

Ist soweit ja auch logisch, weil meine Daten in Dateien des Formats (zB) 1x48 char und die Variablen Temperatur=1891x1 double vorliegen.#

Muss ich jetzt die Struktur der daten verändern oder gibt es einen Alternativbefehl zu dir(), die double behandeln kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 16:53     Titel:
  Antworten mit Zitat      
Hallo,

wie rufst Du Deine dir-Funktion jetzt wieder auf?
Da sollte ja nicht Temperatur als Argument vorkommen.
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, 17:10     Titel:
  Antworten mit Zitat      
Code:

folder='D:\...\Auswertung';
files = dir([folder \'*.mat']);


files([files.isdir]) = [];
dateiname = {files.name};
nFile = length(dateiname);
Data = cell(1, nFile);

for g=1:nFile;
   
    aFile = fullfile(folder, dateiname{g});
           
   
    T=load(aFile,'Temperatur');
    T=T.Temperatur;
    t=load(aFile,'Zeit');
    t=t.Zeit;
    m=load(aFile,'Masse');
    m=m.Masse;
 


Habe so gesehen nichts geändert am dir-Befehl, außer, dass er nur die *.mat Dateien einlesen soll
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, 17:18     Titel:
  Antworten mit Zitat      
Hallo,

der \ muss in den String mit rein.
Und lass uns doch bitte nicht jedes Mal nachfragen, was du nun machst...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.