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

Einlesen von mehreren Dateien gleichzeitig

 

labida

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2010, 20:19     Titel: Einlesen von mehreren Dateien gleichzeitig
  Antworten mit Zitat      
Hallo!
Ich bin ganz neu mit matlab und habe dementsprechend sehr wenig Ahnung, habe nur mal ein wenig C programmiert, mich aber nie mit Dateihandling beschäftigt.
Ich möchte gerne ein Skript schreiben um aus mehreren Dateien gleichzeitig Datensätze einzulesen.

Folgendes Format haben die Dateien:

Header

Datensatz1

Datensatz2
.
.
.

Die verschiedenen Dateien sind alle gleich aufgebaut, interessant ist für mich immer nur ein bestimmter Datensatz (z.B. Datensatz1 (Reifen links vorne) bei Datei 1-5, Datensatz 2 (Reifen rechts vorne) bei Dateien 6-8 etc.)
Da es sich um viele Dateien handelt, möchte ich nicht mit einer Schleife uigetfile jeden zu importierenden Ordner zeigen müssen. Deshalb versuche ich eine Lösung mit untenstehendem Code zu finden:

Code:
[filename, pathname, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');

Nun würde ich gerne alle Dateien öffnen und die entsprechenden Datensätze mit textscan auslesen. Meine Fragen:

1) Wie kann ich textscan "ohne headerlines" sagen, wo er anfangen soll, am besten auch noch so, dass man dies in einer GUI einstellen kann? Vor jedem Datensatz gibt es einen bestimmten Ausdruck (Reifen links vorne, Reifen rechts vorne ect.). Kann ich mir dies irgendwie zu Nutze machen?

2) Wie schaffe ich es, mit fopen die ausgewählten Dateien alle zu öffnen, und die entsprechenden Datensätze in verschiedenen Vektoren zu speichern, sodass man anschließend die Datensätze plotten kann?

Zum Verständnis: uigetfile macht die Dateien für matlab existent, oder?

Schon mal vielen Dank für für die Hilfe

Gruß


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2010, 09:26     Titel: Re: Einlesen von mehreren Dateien gleichzeitig
  Antworten mit Zitat      
labida hat Folgendes geschrieben:
Zum Verständnis: uigetfile macht die Dateien für matlab existent, oder?


Nein, uigetfile öffnet lediglich ein Fenster, in dem man Dateien auswählen kann und gibt die Pfade der ausgewählten Dateien zurück.

Anschließend kannst Du die so gewonnenen Information an fopen, textread, dlmread, xlsread, csvread, ... übergeben, die dann wiederum die Dateiinhalte preisgeben.

Matlab bietet ziemlich viele Funktionen zum Dateien auslesen an - gerade, wenn dort strukturierte Daten drinstecken, ist eigentlich für jeden Geschmack was dabei. Einfach mal die Hilfe bemühen, die ist im allgemeinen sehr ausführlich und verweist auch zu ähnlichen Befehlen. dlmread ist grundsätzlich ein guter Startpunkt...
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2010, 16:13     Titel:
  Antworten mit Zitat      
Hallo!
Danke für deine Antwort. Ich habe die Hilfedatei schon durchgemacht, deswegen habe ich ja vorgeschlagen textscan zu verwenden, da ich ja in Mitten der Datei anfangen möchte auszulesen. Für eine Datei klappt das auch schon super, habe folgendes Skript erstellt:
Code:
[txtfile, path]= uigetfile ('*.mka','Bitte Datei auswählen');
    fid=fopen(fullfile(path,txtfile),'r');
    rawdata=textscan(fid,'%f','headerlines', 98);
    data =rawdata{1};
fclose(fid);
 


Nun möchte ich aber mit dem schon im ersten Beitrag genannten Befehl meherere Dateien gleichzeigtig öffnen und in Vektoren "data1, data2 etc" speichern. Kann ich das irgendwie realiesieren? Leider fehlt es mir da an Verständnis, wie ich die ausgegebenen Pfade mit fopen öffnen kann. dlmread ist glaube ich nicht sinnvoll bei meiner Anwendung, da ich ja sozuagen nach Keywords suchen will, und erst ab der nächsten Zeile nach dem Keyword einlesen möchte. dlmread kann ja glaube ich nur nummerische Daten lesen oder?

Gruß
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2010, 16:25     Titel:
  Antworten mit Zitat      
Du kannst uigetfile mit der Option multiselect aufrufen, dann kannst Du mehrere Dateien auswählen. Die liest Du dann einfach mit Hilfe einer Schleife der Reihe nach ein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2010, 12:04     Titel:
  Antworten mit Zitat      
Ja soetwas in der Richtung dachte ich mir. Nur wie genau muss ich die Schleife initialisieren. Wie werden die Dateien genau eingelesen? Ich muss ja der Schleife eine Abbruchbedingung geben. Das heißt Matlab muss ja jedem Pfad einen bestimmten Dateinamen geben. Ist dies der Filterindex? Diese Dateien muss ich irgendwie zählen und diese Anzahl dann als Abbruchbedingung in die Schleife schreiben. Dann muss ich fopen in der Schleife die Speicherorte zuweisen. Mein Problem ist, dass ich nicht weiß was genau mit den Pfaden passiert sobald diese von uigetfile ausgelesen wurden. Werden diese in einem Vektor gespeichert? Wie heißt dieser Vektor/ diese Variable?

Besten Dank schonmal
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2010, 12:15     Titel:
  Antworten mit Zitat      
Ok habs gefunden... die werden alle in filename gespeichert als Vektor. Gut Danke Smile glaub das hilft weiter. Manchmal ists doch alles einfacher als man denkt^^
Ich denke aber ich werde mich demnächst nochmal melden, gerade wenns dann um das keyword geht...

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2010, 13:38     Titel:
  Antworten mit Zitat      
Code:
könnte womöglich Dein Freund werden ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2010, 15:44     Titel:
  Antworten mit Zitat      
Ja numel ist mein Freund, aber leider auch mein Feind. Smile Denn wenn ich nur eine Datei auswähle, die eingelesen werden soll, dann wird das Cell Array filename zu einem Char Array filename. Folglich gibt mir numel dann die Anzahl der Charakters aus, wobei ich gerne nur die Anzahl des Cell Arrays haben möchte. Ich habe schon versucht das Char Array als Cell Array zu casten, leider ohne Erfolg...
Code:

rawdata=[];
[filename, path, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');
file = cast ( filename, cell);
i = numel (file);
for index =1:1:i
    fid=fopen(fullfile(path,filename{index}),'r');
    rawdata{index}=textscan(fid,'%f','headerlines', 98);
     
end
fclose(fid);


Wie könnte ich das hinbekommen? Wenn ich mehr als eine Datei auswähle funktioniert es schon super. Smile

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.04.2010, 16:57     Titel:
  Antworten mit Zitat      
Hallo
baue eine Abfrage mit iscell ein:
Code:


rawdata=[];
[filename, path, filterindex] = uigetfile( ...
{  '*.mka','MKA-files (*.mka)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Bitte Dateien auswählen', ...
   'MultiSelect', 'on');

% wenn filename nicht cell, dann mache eins
if ~iscell(filename)
   filename={filename};
end

i = numel (filename);
for index =1:1:i
    fid=fopen(fullfile(path,filename{index}),'r');
    rawdata{index}=textscan(fid,'%f','headerlines', 98);
     
end
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2010, 12:46     Titel:
  Antworten mit Zitat      
Hallo!
Danke das hat geholfen, soweit funktioniert jetzt das einwesen. Smile

Gruß
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.