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

use*_*487 2 matlab text-files

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

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

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

tim*_*geb 5

我们来看看这个示例文件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)