读入文件并跳过以特定字符串开头的行

时间:2014-06-12 09:44:48

标签: matlab text-files

我正在尝试使用Matlab读取文本文件。 该文件采用以下格式:

字符串编号
字符串编号
....

我想跳过以特定字符串开头的行。对于任何其他字符串,我想在该行中保存两个数字。

1 个答案:

答案 0 :(得分:5)

我们来看看此示例文件file.txt

badstring 1 2
badstring 3 4
goodstring 5 6
badstring 7 8
goodstring 9 10

如果一行以badstring开头,我们会跳过它,否则我们会在字符串后面存储两个数字。

fid = fopen('file.txt');
nums = textscan(fid, '%s %f %f');
fclose(fid);
ind = find(strcmp(nums{1},'badstring'));
nums = cell2mat(nums(:,2:end));
nums(ind,:) = [];
display(nums)

这会将整个文件读入单元格数组,然后将其转换为矩阵(不包含字符串),然后终止最初以badstring开头的任何行。或者,如果文件非常大,您可以使用此迭代解决方案避免临时存储所有行:

fid = fopen('file.txt');
line = fgetl(fid); 
numbers = [];
while line ~= -1 % read file until EOF
    line = textscan(line, '%s %f %f');
    if ~strcmp(line{1}, 'badstring')
        numbers = [numbers; line{2} line{3}];
    end
    line = fgetl(fid);
end
fclose(fid); 
display(numbers)