2017-05-31 3426 views
0

我有一个巨大的.txt文件,我想解析其中的一部分(使用文本扫描),例如我有10000行数据和一部分从第300行开始,部分也有一个10行的标题说,我怎么可以跳过前300行(当然不使用文本扫描的标题功能,因为我然后不能得到我的实际10行标题)或有一种方法,我可以跳到第300行并从那里开始文本扫描,就好像301行是第一行一样。使用matlab中的textscan跳过txt文件中的行

+0

不同部分有不同的格式吗?所以你说有一部分你想从300扫描到10,000行。行300到310是标题?数据格式如何? – houtanb

+0

否,比如说300-340是300-310的标题部分,10,000行中可能有几个这样的部分。 – maz

回答

0

因此,假设您的数据是通过生成以下(因为你没有提到它是如何在你的问题格式):

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); 

可以读取数据首先使用fgetl前进到第300行,然后使用textscan两次获取标题信息和数据。基本上,要记住的是textscanfid指向的地方开始工作。所以,如果它指向第301行,它将从那里开始扫描。所以,这里的阅读上面的文件,从第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:如果数据始终是相同的格式,你可以使用ftell知道在哪里跳到究竟然后使用fseek去偏移。

+0

我有行号在哪里开始使用文本扫描'textscan(fid,'%s','Delimiter','\ n')'我现在想要直接跳到这些行,如何跳到说第300行直接没有从开始计数总是 – maz

+0

fseek不会帮助,因为我的数据是不对称的,并包含值和表,我想要的东西,可以跳线,其中行是从上述代码中获得的,你的第二个代码似乎很好(我目前使用同样的想法),但我的文件很大,数百万行,我不能使用for循环提到 – maz

+0

你不能。如上所述,循环中的“fgetl”是唯一的方法。 – houtanb