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

Gleiche Auswertung vieler Dateien

 

Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 15:53     Titel: Gleiche Auswertung vieler Dateien
  Antworten mit Zitat      
Hallo liebes goMatlab-Forum,

ich bin in der Messtechnik tätig und habe folgendes Problem.
Ich habe aus einem Langzeit-Messversuch viele Messdateien die alle gleich aufgebaut sind.
Man kann sich das ganze so vorstellen, dass jeden Tag eine neue Messdatei erstellt worden ist.

Jeder Tag ist wie folgt aufgebaut:

Datum | Messzeit | Temperatur-Mittelwert | Temperatur-Max |

Jede Datei hat jeweils 24 Messungen (jede Stunde)

Nun habe ich das Problem, dass ich ca. 250 Dateien habe, von denen ich als Beispiel auch das Tagesmaximum ermitteln muss.

Ich will aber eigentlich nicht alle 250 Dateien einlesen und die entsprechenden Spalten manuel per Hand importieren um sie am Ende in Matlab auswerten zu können.

Jetzt meine Frage, hat man in Matlab die Möglichkeit sowas anders zu erreichen? Idealerweise müsste ich am Ende alls Daten in einer workspace haben um die Werte in jeder Zusammenstellung plotten zu können.

Ich hoffe Ihr könnt mir weiterhelfen.
Sunny


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 15:56     Titel:
  Antworten mit Zitat      
wie man daten automatisch einliest wurde in diesem forum schon sehr oft besprochen. einfach mal die sufu benutzen. wenn dann probleme auftreten kannst gerne nochmal nachfragen.
_________________

richtig Fragen
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: 10.09.2013, 16:24     Titel: Re: Gleiche Auswertung vieler Dateien
  Antworten mit Zitat      
Hallo Sunnny,

Winkow's Tipp ist sehr effizient.

Deine Nachricht enthält viele Details, die mit dem eigentlichen Problem nichts zu tun haben. Eigentlich suchst Du nur nach einer Methode eine Liste von 250 Files einzulesen, oder? Nun fehlt aber dann genau die Information, die zur Lösung wichtig wäre, nämlich wie man die Liste der Datei-Namen erhalten könnte. Stehen die alle in einem Ordner, oder haben alle den gleichen Namen
und sind auf 250 Ordner verteilt? Oder enthalten die Datei-Namen vielleicht wichtige Informationen wie den Messtag?

Im Groben funktioniert es so:
Code:
List = dir(fullfile(Folder, '*.dat')); % Passend zu Deinen Files
nList = length(List);
Data = cell(1, nList);
for k = 1:nList
  Data{k} = ImportFile(fullfile(Folder, List(k).name));
end

Und statt "ImportFile" benötigst Du eine Methode um ein File zu importieren.

Wenn Du auch noch am Import der Files arbeitest, erkläre das nochmal speziel.
Zitat:
Jeder Tag ist wie folgt aufgebaut:
Datum | Messzeit | Temperatur-Mittelwert | Temperatur-Max |
Jede Datei hat jeweils 24 Messungen (jede Stunde)

Das ist noch nicht eindeutig. Das Posten eines konkreten Beispiels wäre hilfreicher.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 19:19     Titel:
  Antworten mit Zitat      
Hallo Jan,

leider liegen nicht alle Dateien in einem Ordner.
also mein Beispiel würde so aussehen:
Der Dateiname ist leider nicht durchnummeriert, muss also in Form einer Liste eingelesen werden, oder aber einzeln per load. Eine Liste mit Pfad und Dateiname besteht bereits.

Code:

Datum   Messzeit   Temperatur-Mittelwert   Temperatur-Max
01.01.2000   01:00:00   2.1   3.4
01.01.2000   02.00:00   2.2   2.6
01.01.2000   03:00:00   1.9   2.3
 


Meine Idee war nun folgende:
Die erste Datei mit "load" einlesen, die entsprechende Spalte rechnerisch Bearbeiten (Tagesmaximum ermitteln) und diesem Wert dann als Variable im Workspace speichern. Danach dann die nächste Datei und gleiches Verfahren.

So versuche ich das ganze grade aufzubauen.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 19:24     Titel:
  Antworten mit Zitat      
load ist eine der wenigen methoden die da nicht geht da es sich ja nicht um mat dateien handelt.
wenn die liste mit datei und pfadnamen bereits besteht sollte es nicht sondernlich schwer sein alles mittels forschleife einzulesen.
such mal nach textscan oder textread im forum
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 17:18     Titel:
  Antworten mit Zitat      
Ich habe es bisher jetzt mal so gemacht, dass mit folgendem Code alle Dateien aus einem gewünschten Ordner in eine Variable (Mfiles) geschrieben werden:

Code:

clear;
clc;
pathname = uigetdir('', 'Verzeichnis wählen');
if pathname == 0
  return
end

Mdir = dir(pathname);
nbentries = size(Mdir, 1);
Mfiles = [];
for entry_i = 1:nbentries
  if Mdir(entry_i).isdir == false

    filename = Mdir(entry_i).name;
    if filename(1) ~= '.'
      [p, n, ext] = fileparts(filename);
      if strcmpi(ext, '.sum')
        Mfiles = strvcat(Mfiles, filename);
      end
    end
  end
end
nbfiles = size(Mfiles, 1);
 


Nun, beim Einlesen der Dateien und verarbeiten, habe ich etwas Problem.
In einer "normalen" Schleife würde es ja so wie hier laufen:

Code:

for i=x:x   % x bezeichnet hierbei die Grenzen
    load (sprintf('........', i);
end
 


nun weiß ich aber leider nicht, wie ich mit Hilfe der Schleife die Dateien aus der Variablen lesen kann um diese nacheinander zu öffnen und zu bearbeiten.

Es sollen dann in JEDER Datei die selben 3 Spalten bearbeitet werden und anschließend mit dem Dateinamen und den zusätzen "min, mean und max" für die jeweiligen 3 Spalten als Variable in einer gemeinsamen Workspace gespeichert werden.

Ist sowas von der Theorie generell machbar, oder sollte ich eher einen anderen Weg versuchen?

Hat jemand sowas schonmal gemacht und kann mir hierbei helfen?
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.09.2013, 17:35     Titel:
  Antworten mit Zitat      
hast du gelesen was ich geschrieben hab ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 18:06     Titel:
  Antworten mit Zitat      
Ja, habe ich. Hat mich aber ehrlich gesagt bisher noch nicht weitergebracht.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.09.2013, 18:11     Titel:
  Antworten mit Zitat      
ich hab geschrieben das load nicht gehen wird und du textscan oder textread nehmen sollst und dann hast du ein beispiel gepostet in dem du load benutzen willst. das ist mir nicht ganz klar. warum versuscht du nicht erst einmal textread zu verwenden und dann code zu posten und fehlermeldungen etc. beispiel daten währen auch angebracht.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 18:24     Titel:
  Antworten mit Zitat      
Okay,
mir geht es jedoch nicht darum ob man load nutzt oder textscan oder was auch immer, sondern wie man die Schleife aufbaut, wenn man eine Liste der Dateinamen hat.

Code:

fileID = fopen('x.sum');
C = textscan(fileID, '%s %f %f %f %f %f %f %f %f %f %f');
fclose(fileID)
 
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.09.2013, 18:34     Titel:
  Antworten mit Zitat      
wenn du eine datei hast also ein cellarray mit den dateinamen und pfad zb in A

Code:

for k=1:length(A)
fileID = fopen(A(k));
C = textscan(fileID, '%s %f %f %f %f %f %f %f %f %f %f');
fclose(fileID)
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Sunnny

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2013, 18:54     Titel:
  Antworten mit Zitat      
Hierbei bekomme ich immer die Fehlermeldung:

Error using textscan
Invalid file identifier. Use fopen to generate a valid file identifier.

In dieser Zeile:
Code:

C=textscan(fid, '"%*s" "%*f" "%*f" "%*f" "%*f" "%f" "%f" "%f" "%*f" "%*f" "%*f" "%*f"
    "%*f"');
 
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.09.2013, 18:58     Titel:
  Antworten mit Zitat      
dann geht man mal mit dem debugger rein und guckt sich an was denn in A zu dem schleifenaufruf drinsteht. ohne lauffähiges minimalbeispiel mit beispieldaten ist das nur gerate Smile
_________________

richtig Fragen
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: 12.09.2013, 11:48     Titel:
  Antworten mit Zitat      
Hallo Sunnny,

Die Fehlermeldung "Invalid file identifier. Use fopen to generate a valid file identifier." bedeutet, dass "fid" kein valider File-Identifikator ist. Entweder existiert das File nicht, oder Du hast "fid" definiert ohne fopen() aufzurufen.

Grundsätzlich gehört hinter ein FOPEN immer ein Test auf erfolgreiches Öffnen:
Code:
Mode = 'r';
fid = fopen(FileName, Mode);
if fid == -1
  error('Cannot open file: %s for mode: %s', FileName, Mode);
end

Ich habe schon viel zu viele Fragen in Foren für verschiedene Programmiersprachen gesehen, in denen die Usetr sich gewundert haben, dass man nach einem nicht-erfolgreichen FOPEN in das nicht spezifizierte File nicht schreiben kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.