我正在尝试使用Matlab读取文本文件。 该文件采用以下格式:
字符串编号
字符串编号
....
我想跳过以特定字符串开头的行。对于任何其他字符串,我想在该行中保存两个数字。
答案 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)