2016-08-08 29 views
1

Ich habe eine Frage bezüglich der Oktav- oder Matlab-Datennachbearbeitung. Ich habe Dateien von fließend wie unten ausgeführt:octave/matlab Textdatei Zeile für Zeile lesen und nur Zahlen in Matrix speichern

     "Surface Integral Report" 

     Mass-Weighted Average 
      Static Temperature     (k) 

  crossplane-x-0.001   1242.9402 
      crossplane-x-0.025   1243.0017 
      crossplane-x-0.050   1243.2036 
      crossplane-x-0.075   1243.5321 
      crossplane-x-0.100   1243.9176 

Und ich möchte für die Nachbearbeitung Oktave/Matlab verwenden. Wenn ich zeilenweise erste Zeile lese und nur die Zeilen mit "crossplane-x-" in eine neue Datei speichere oder die Daten in diesen Zeilen direkt in einer Matrix abspeichern. Da ich viele ähnliche Dateien habe, kann ich Plots erstellen, indem ich einfach ihre Titel anrufe. Aber ich gehe Probleme auf identifizieren Zeilen, die das Zeichen "crossplane-x-" enthalten. Ich versuche, Dinge wie folgt zu tun:

clear, clean, clc; 
% open a file and read line by line 
fid = fopen ("h20H22_alongHGpath_temp.dat"); 
% save full lines into a new file if only chars inside 
txtread = fgetl (fid) 
num_of_lines = fskipl(fid, Inf); 
char = 'crossplane-x-' 
for i=1:num_of_lines, 
    if char in fgetl(fid) 
    [x, nx] = fscanf(fid); 
    print x 
    endif 
endfor 
fclose (fid); 

Würde jemand etwas Licht auf dieses Problem werfen? Benutze ich die richtige Funktion? Vielen Dank.

+0

Ich denke, grep oder awk für diese Aufgabe besser geeignet ist – Andy

+0

Sie Andy Danke, habe ich sed ... – BeYo

Antwort

0

Hier ist ein schneller Weg für Ihre spezifische Datei:

>> S = fileread("myfile.dat");  % collect file contents into string 
>> C = strsplit(S, "crossplane-x-"); % first cell is the header, rest is data 
>> M = str2num (strcat (C{2:end})) % concatenate datastrings, convert to numbers 
M = 

    1.0000e-03 1.2429e+03 
    2.5000e-02 1.2430e+03 
    5.0000e-02 1.2432e+03 
    7.5000e-02 1.2435e+03 
    1.0000e-01 1.2439e+03