我正在尝试使用Matlab读取文本文件.该文件采用以下格式:
字符串编号
字符串编号
....
我想跳过以特定字符串开头的行.对于任何其他字符串,我想保存该行中的两个数字.
我们来看看这个示例文件file.txt:
badstring 1 2
badstring 3 4
goodstring 5 6
badstring 7 8
goodstring 9 10
Run Code Online (Sandbox Code Playgroud)
如果一行开头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)
Run Code Online (Sandbox Code Playgroud)
这会将整个文件读入一个单元格数组,然后将其转换为一个矩阵(没有字符串),然后杀死最初开始的任何行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)
Run Code Online (Sandbox Code Playgroud)