2017-03-22 11 views
0

Ich habe eine Textdatei, die Ergebnisse für viele Zeitschritte enthält. Für jeden Zeitschritt wurden einige grundlegende Informationen in der ersten Zeile gespeichert, gefolgt von einer Matrix, die weitere Daten für diesen Schritt enthält. Die Matrixgröße kann sich bei jedem Zeitschritt unterscheiden und ist nicht vordefiniert.Wie lese ich eine strukturierte Textdatei und erstelle eine Struktur dafür in Matlab?

Wie erstellt man eine Struktur basierend auf einer solchen Textdatei?

Vielen Dank im Voraus!

P.S. die Ergebnisse in Textdatei sieht wie folgt aus:

time= 4.3750000000000001E-004   3   7   4   1 4.9999989999999998E-004 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 5.6569E+08 7.5717E+08 5.6569E+08 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

time= 5.0000000000000001E-004   3   5   3   0 4.9999989999999998E-004 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 2.3593E+08 0.0000E+00 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 

time= 1.8125000000000001E-003   3   3   3   1 1.8749999000000001E-003 
    0.0000E+00 0.0000E+00 0.0000E+00 
    0.0000E+00 3.9138E+07 0.0000E+00 
    0.0000E+00 0.0000E+00 0.0000E+00 

Antwort

1

jeden neuen Satz Nehmen wir für Daten, die von time= beginnt und endet mit Abstand Linie, können Sie das folgende Codebeispiel verwenden:

%Open text file for reading (assume file name is 'Data.txt'). 
f = fopen('Data.txt', 'r'); 

%Initialize main (store data) to empty matrix. 
main = []; 

%Initialize index to 1 
i = 1; 

while (~feof(f)) 
    %Read single line from text file (as long string). 
    S = fgets(f); 

    if (strfind(S, 'time') > 0) 
     %Remove 'time= ' from the beginning of S. 
     S = strrep(S, 'time=', ''); 

     %Convert string to array of numbers. 
     T = sscanf(S, '%f '); 

     %Store vector T to main(i).sub1 
     main(i).sub1 = T'; 

     %Set A to empty matrix - prepare for filling with new data. 
     A = []; 

     %Read next line from text file (as long string). 
     S = fgets(f);   
    end  

    %Convert string to array of numbers. 
    L = sscanf(S, '%f '); 

    if (isempty(L) || feof(f)) 
     %Store matrix A to main(i).sub2 
     main(i).sub2 = A; 

     %Advance i (data index) by 1. 
     i = i + 1; 
    else 
     %In case A is not empty, concatenate T to bottom of A. 
     A = [A; L']; 
    end 
end 

%Close file. 
fclose(f); 

Ergebnis :

>>main(1) 

sub1 = 

    4.3750e-04 3.0000e+00 7.0000e+00 4.0000e+00 1.0000e+00 5.0000e-04 

sub2 = 

      0   0   0   0   0   0   0 
      0   0 565690000 757170000 565690000   0   0 
      0   0   0   0   0   0   0 
      0   0   0   0   0   0   0 


>>main(2) 

sub1 = 

    0.00050 3.00000 5.00000 3.00000 0.00000 0.00050 

sub2 = 

      0   0   0   0   0 
      0   0 235930000   0   0 
      0   0   0   0   0 


>>main(3) 

sub1 = 

    0.0018125 3.0000000 3.0000000 3.0000000 1.0000000 0.0018750 

sub2 = 

      0   0   0 
      0 39138000   0 
      0   0   0 
+0

Danke Rotem! Ich denke darüber nach, die Struktur so zu speichern, dass die gesamte erste Zeile eines Zeitschritts in einer Unterstruktur 'main (i) .sub1' liegt, die 1x7 Elemente enthält, und die Matrix unter jedem Zeitschritt wird main (i) .sub2, dieses enthält MxN-Elemente (M, N variiert in jedem Zeitschritt). hier beziehe ich mich auf den i-ten Zeitschritt. Und ich denke, die bearbeitete Version der Daten in meiner Frage zeigt nicht mehr die klare Struktur der Textdatei ... – open0121

+0

Entschuldigung für die Bearbeitung Ihrer Post falsch (es sah zu chaotisch). Kannst du deinen Beitrag bitte erneut bearbeiten? Machen Sie deutlich, wie Sie MxN-Elemente aus dem Textdateiformat erhalten. Machen Sie die Struktur klar, die Sie mögen. Bitte posten Sie nicht den gesamten Inhalt Ihrer Textdatei - posten Sie gerade genug, um es zu verdeutlichen. – Rotem

+0

Hallo Rotem, kein Problem! Jetzt ist die Struktur in der Post klar. – open0121

Verwandte Themen