Verfasst am: 04.12.2012, 18:18
Titel: textscan aus mehreren Dateien
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
Verfasst am: 04.12.2012, 18:47
Titel: Re: textscan aus mehreren Dateien
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.
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.
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
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
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
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.