我有一个输入文件,其中包含如下所示的整数行:
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>
在阅读文件时,我想忽略这些行。这样做的最佳方法是什么?我可以告诉文本可以忽略某些模式吗?
答案 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.0
或1 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
是包含您数据的矩阵。