Verfasst am: 03.02.2010, 14:27
Titel: große .txt datei richtig einlesen
Servus,
ich hab gerade erst mit Matlab zu programmieren angefangen, also nicht wundern falls die eine oder andere blöde Frage von mir kommt.
Mein Problem ist folgendes, ich habe eine txt datei die ich gern einlesen möchte, die folgenden Aufbau hat.
wobei die 128 dafür steht wie viele Zahlen in einer Zeile nach dem '<Circle ...>;' folgen (ist immer 128) und die 1285=K wie viele Zeilen es gibt die mit Circle anfangen (dies Anzahl ändert sich von Berechnung zu Berechnung).
Ich hätte nun gern, dass ich zwei Matrizen rausbekomme, die erste hat die Dimension K-by-4, und dort stehen die vier Zahlen die in dem Circle Bereich drin stehen. Die zweite Matrix hat die Dimension K-by-128 und dort stehen die anderen 128 Zahlen jeder Zeile.
Ich hab selber schon viel rumprobiert sowohl mit textread und textscan bin allerdings leider nicht weiter gekommen.
Ich hoffe ihr wisst was ich meine und könnt mir helfen.
ich würde textscan nutzen, hier mal ein schnelles Beispiel:
Code:
filepath='test2.txt';
file_2 = fopen(filepath,'r');
if file_2~=-1
A = textscan(file_2,'%s%f%f%f%f%f%s%f%f%f%f%f%f%f%f%*[^\n]','Headerlines',2);
fclose(file_2);
else errordlg(['The file ' filepath '.txt could not be opened, please check the path.']);
end
Vielen Dank schon mal für deine Hilfe, schaut auch schon sehr vielversprechend aus, nur noch eine Kleinigkeit, es werden leider nur so viele Spalten eingelesen, wie angeben sind:
Code:
A = textscan(file_2,'%s%f%f%f%f%f%s%f%f%f%f%f%f%f%f%f%*[^\n]','Headerlines',3);
das '%*' soll ja bedeuten dass noch beliebig viele andere kommen können, oder? nur das klappt leider nicht, gibt es da eine andere Möglichkeit? Bzw hierbei wüsste ich ja dass noch 128 Zahlen kommen, kann man das mit angeben?
das steht dafür, dass beliebig viele Zeichen vor dem Umbruch ignoriert werden.
Den einzigen Weg, denn ich zurzeit kenne, ist 128 %f an der richtigen Stelle einzufügen.
Das würde auch mit mehreren textscans in einer Schleife funktionieren.
Mir ist leider kein Befehl bekannt um textscan zu sagen lies 128 mal ein double pro Zeile ein, vielleicht kennt ja jemand anderes einen Trick oder es gibt sowas einfach nicht.
ja ich habs mit 128%f gelöst, schaut zwar nicht toll aus, aber es funktioniert. Hab nur gedacht dass es eigentlich auch eine elegantere Lösung geben müsste, aber trotzdem danke!
ja ich denke eigentlich auch, dass es da etwas geben sollte aber ich kenne nur die etwas elegantere Lösung mit for Schleifen. Obwohl warte mal, so müsste es gehen:
Code:
A = textscan(file_2,['%s%f%f%f%f%f%s' repmat('%f',1,128) '%*[^\n]'],'Headerlines',3);
bin auch dabei eine txt datei einzulesen, allerdings möchte ich bestimmte daten einelsen.
Code:
filepath='bsp.txt';
file = fopen(filepath,'r');
if file~=-1 [spalte1, spalte2, spalte3, spalte4, spalte5] = textread(filepath,'%f%f%f%d%d',5,'headerlines',5);
%liest alle spalten ein und stellt sie korrekt da
[spalte1, spalte3, spalte5] = textread(filepath,'%f%f%f',5,'headerlines',14);
%liest nur spalten 1-3, stellt sie nicht korrekt da
fclose(file);
else errordlg(['The file ' filepath '.txt could not be opened, please check the path.']);
end
Wie kann ich gezielt im txt file daten suchen und auslesen? Die Daten sollen später noch nach verschieden Kriterien eingelsen werden, die ich nach nr1 und nr benannt habe. Sodass ich ihm nicht immer die headerlines vorgeben muss. die splatennamen (spalte 1,...) bleiben gleich, ihre Werte unterscheiden sich nurnoch durch die verschieden nr (nr1,...) Sind da Schleifen die beste Wahl?
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.