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

textscan aus mehreren Dateien

 

Stefan76
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.12.2012, 18:18     Titel: textscan aus mehreren Dateien
  Antworten mit Zitat      
Hallo zusammen,

ich bin ein Matlab-Newbie und bin absolut kein Schleifenkönig und habe deshalb folgendes Problem:

Ich habe mich bereits durch das Forum gekämpft und mein Ziel erreicht, allerdings ist die Methode eher manuell. Wenn meine Matrix nur 5 Spalten hat ist das kein Problem aber wenn es mal, was es in der Regel sind, mehr sind wie z.B. 200 dann wäre eine geschickte Alternative super.
Vieleicht kann mir ja jemand helfen und meinen vorhandenen Code so umschreiben, dass die vielen Zeilen unten mit data() wegfallen.


Code:
files=dir('...Daten-Quelle...\*.ascii');   % Liste aller .ascii-Dateien im Verzeichnis anlegen
kmax=numel(files);      % Wie viele sind es?
data=cell(kmax,1);      % Entsprechend grosse Cell anlegen
for k=1:kmax
    fid=fopen(files(k).name,'rt'); % k-te Datei oeffnen
    temp=textscan(fid,'%*f %*d %*f %f','delimiter',' ','HeaderLines',12);
          % 1., 2., 3. % ignorieren, 4. Spalte einlesen
    fclose(fid);       % k-te Datei wieder schliessen
    data{k,1}=[temp{:}];     % Dateiinhalt speichern
end

for k=1:kmax
   
Utmp = [data{01}(:,1) data{02}(:,1) data{03}(:,1) data{04}(:,1) data{05}(:,1) ...
        data{06}(:,1) data{07}(:,1) data{08}(:,1) data{09}(:,1) data{10}(:,1) ...
        data{11}(:,1) data{12}(:,1) data{13}(:,1) data{14}(:,1) data{15}(:,1) ...
        data{16}(:,1) data{17}(:,1) data{18}(:,1) data{19}(:,1) data{20}(:,1) ...
        data{21}(:,1) data{22}(:,1) data{23}(:,1) data{24}(:,1) data{25}(:,1) ...
        data{26}(:,1) data{27}(:,1) data{28}(:,1) data{29}(:,1) data{30}(:,1)];
   
    % k-te Dateien in Matrix,  Spalte 1 bis 30

end

 


Vielen Dank schonmal.

Grüße,
Stefan
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: 04.12.2012, 18:47     Titel: Re: textscan aus mehreren Dateien
  Antworten mit Zitat      
Hallo Stefan76,

Es ist noch nicht klar, was Du erreichen möchtest, weil innerhlab der "FOR k" Schleife der Zähler k gar nicht benutzt wird. Ich vermute aber, CELL2MAT könnte Dir weiterhelfen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.12.2012, 18:53     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank schonmal. Stimmt Du hast recht. haha
Was da steht will ich letztlich genau so haben aber eben irgendwie mit einer Schleife dass ich diese Matrix bilden kann ohne dafür sämtliche Einträge manuell schreiben zu müssen.

Wie meinst du das mit CELL2MAT?

Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan76
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 18:20     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe es nun mit cell2mat nochmal probiert aber dann schreibt es mir alle cells untereinander in eine Matrix. Wie bekomme ich es hin dass es sie nicht untereinander sondern nebeneinander in verschiedene Spalten schreibt.

Sorry, meine Fähigkeiten beschränken sich wirklich sehr.

Hier nun nochmal der Code wie ich ihn bislang habe:

Code:
files=dir('E:\UNI Stuttgart\Studienarbeit IVK\Daten\Alt_30_Snapshots\Velocity\Velocity_Magnitude\*.ascii');   % Liste aller .ascii-Dateien im Verzeichnis anlegen
kmax=numel(files);      % Wie viele sind es?
data=cell(kmax,1);      % Entsprechend grosse Cell anlegen
for k=1:kmax
    fid=fopen(files(k).name,'rt'); % k-te Datei oeffnen
    temp=textscan(fid,'%*f %*d %*f %f','delimiter',' ','HeaderLines',12);
          % 1., 2., 3. % ignorieren, 4. Spalte einlesen
    fclose(fid);       % k-te Datei wieder schliessen
    data{k,1}=[temp{:}];     % Dateiinhalt speichern
end


   
    Utmp = cell2mat(data);
 


Vielen Dank.

Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2012, 09:27     Titel:
  Antworten mit Zitat      
Willst Du das?
Code:
Utmp = cell2mat(data');
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan76
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 16:08     Titel:
  Antworten mit Zitat      
Hi,

Vielen vielen Dank. Genau das meinte ich.

Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan76
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2012, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

nun hätte ich doch noch eine Frage.
Der Code funktioniert so, wie ich ihn auch haben will, nur liest Matlab die Dateien willkürlich ein. Ich bräuchte aber genau die Reihenfolge wie sie auch die Dateien vorsehen.
Die Dateien heißen alle gleich, bis auf eine Variable die quasi läuft.
Bsp.: Filename_01.ascii, Filename_02.ascii, ...
Wie ich leider fesgestellt habe, liest Matlab nach meinem Code diese aber nicht in genau dieser Reihenfolge ein.
Gibt es hier eine Möglichkeit, den Code so abzuändern dass er sie in genau dieser Reihenfolge nach und nach einliest?

Hierzu nochmal der Code:

Code:
files=dir('File-Pfad\*.ascii');   % Liste aller .ascii-Dateien im Verzeichnis anlegen
kmax=numel(files);      % Wie viele sind es?
data=cell(kmax,1);      % Entsprechend grosse Cell anlegen
for k=1:kmax
    fid=fopen(files(k).name,'rt'); % k-te Datei oeffnen
    temp=textscan(fid,'%*f %*d %*f %f','delimiter',' ','HeaderLines',12);
          % 1., 2., 3. % ignorieren, 4. Spalte einlesen
    fclose(fid);       % k-te Datei wieder schliessen
    data{k,1}=[temp{:}];     % Dateiinhalt speichern
end

 


Wäre super hilfreich wenn mir hier jemand Hilfe geben könnte.

Grüße,
Stefan
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan76
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2012, 21:52     Titel:
  Antworten mit Zitat      
irgendwie mit fileparts sollte es denke ich gehen, aber mir ist nicht genau klar wie dieser Code dann aussehen muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2012, 00:42     Titel:
  Antworten mit Zitat      
Hallo Stefan,

Sortier die Dateinamen einfach:
Code:
file_names = sort({files.name})


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan76
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 03.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 10:47     Titel:
  Antworten mit Zitat      
Vielen vielen Dank Sirius3!!!

Grüße,
Stefan
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.