使用textscan读取文件并忽略某些行

时间:2014-06-18 08:50:11

标签: matlab

我有一个输入文件,其中包含如下所示的整数行:

1 2 3
4 5 6
7 8 9

我想在文件中读到,之前我曾使用textscan函数进行此类任务。 但是数据中有几行(在随机位置)包含双数,例如

<large number of integer lines>
0.12 12.44 65.34
<large number of integer lines>

在阅读文件时,我想忽略这些行。这样做的最佳方法是什么?我可以告诉文本可以忽略某些模式吗?

3 个答案:

答案 0 :(得分:4)

formatSpec参数可以是您正在搜索的参数: http://www.mathworks.de/de/help/matlab/ref/textscan.html#inputarg_formatSpec

如果内容与给定格式不匹配,则终止读取。如果您使用同一文件再次调用textscan,则必须开始读取它上次终止的位置。

来自关联网站:

  

如果您通过使用相同的文本扫描来恢复文件的文本扫描   文件标识符(fileID),然后文本扫描自动恢复读取   在它终止上次阅读时。

答案 1 :(得分:2)

一个选项是简单地只是以浮点数的形式读取所有内容 - 使用textscan或者如果您的数据都是数字dlmread或类似的可能更简单。

然后删除你不想要的行:

data =

    1.0000    2.0000    3.0000
    4.0000    5.0000    6.0000
    0.1200   12.4400   65.3400
    7.0000    8.0000    9.0000

 data(data(:,1)~=round(data(:,1)),:)=[]

data =

     1     2     3
     4     5     6
     7     8     9

如果您以后的代码要求数据矩阵的类型是非浮点数,请使用uint8或类似的代码进行转换。

答案 2 :(得分:1)

假设您不知道浮动线的位置和数量,并且您不想要1.0 2.0 3.01 2 3.0这样的行,我的想法是逐行读取文件,不存储包含.字符的行。

fid = fopen('file.txt');
nums = [];
line = fgetl(fid);
while line ~= -1 % #read until end of file
    if isempty(strfind(line, '.'))
        line = textscan(line, '%d %d %d');
        nums = [nums; line{:}];
    end
    line = fgetl(fid);
end
fclose(fid);

nums是包含您数据的矩阵。