2017-05-31 19 views
0

Ich habe eine große TXT-Datei und Teile, die ich analysieren möchte (mit Text-Scan), sagen, ich habe 10000 Zeilendaten und einen Teil, der bei Zeile 300 beginnt, der Teil hat auch eine Überschrift von 10 Zeilen sagen, wie kann ich die ersten 300 Zeilen überspringen (nicht mit Header-Funktion der Text-Scan natürlich, wie ich dann nicht in der Lage sein werde, meine tatsächliche 10 Zeile Header) oder gibt es eine Möglichkeit, in der ich kann Springe zu Zeile 300 und starte den Textscan von dort aus, als wäre 301 Zeile die erste Zeile.Überspringen von Zeilen in TXT-Datei mit textscan in Matlab

+0

Haben die verschiedenen Teile unterschiedliche Formate? Sie sagen also, dass ein Teil von 300 bis 10.000 Zeilen gescannt werden soll. Und Zeilen 300 bis 310 sind der Header? Wie werden die Daten formatiert? – houtanb

+0

nein, sagen 300-340 ist der Teil, der Header von 300-310 hat, kann es mehrere solcher Teile in 10.000 Zeilen. – maz

Antwort

0

Also, Ihre Daten unter der Annahme wird durch die folgenden erzeugt (da Sie nicht erwähnt haben, wie es in Ihrer Frage formatiert ist):

fid = fopen('datafile.txt', 'w'); 

for i=1:300 
    fprintf(fid, 'ignore%d\n', i); 
end 

for i=301:310 
    fprintf(fid, 'header%d\n', i); 
end 

for i=311:10000 
    fprintf(fid, '%d\n', i); 
end 

fclose(fid); 

Sie die Daten, indem zuerst fgetl zum 300sten Zeile lesen , dann zweimal mit textscan, um die Header-Informationen und die Daten zu erhalten. Grundsätzlich ist die Sache zu erinnern, dass textscan ab dem Ort arbeitet, wo fid zeigt. Also, wenn es auf die 301. Zeile zeigt, beginnt es von dort zu scannen. So, hier ist der Code die Datei oben zu lesen, ab Zeile 301:

fid = fopen('datafile.txt', 'r'); 

for i=1:300 
    fgetl(fid); 
end 

scannedHeader = textscan(fid, '%s', 10); 
scannedData = textscan(fid, '%d'); 

fclose(fid); 

NB: wenn die Daten immer das gleiche Format, können Sie ftell verwenden zu wissen, wo sie überspringen genau dann verwenden fseek zu diesem Offset gehen.

+0

Ich habe Zeilennummern, wo der Teil beginnt mit Text scannen 'textscan (fid, '% s', 'Delimiter', '\ n')' Ich möchte jetzt direkt zu diesen Zeilen springen, wie man zur 300sten Zeile springt direkt ohne von Anfang an zu zählen immer – maz

+0

fseek wird nicht helfen, da meine Daten asymmetrisch sind und Werte und Tabellen enthalten, ich möchte etwas, das Zeilen springen kann, wo Zeilen von oben genanntem Code erhalten werden, Ihr zweiter Code scheint in Ordnung (ich benutze derzeit den gleiche Idee), aber meine Datei ist groß, Millionen von Zeilen, kann ich nicht die For-Schleife erwähnt – maz

+0

Sie können nicht. 'fgetl' in einer Schleife ist der einzige Weg, wie oben beschrieben. – houtanb

Verwandte Themen