假设我有一个.txt文件,如下所示:
2
3
jack
hello
46
87
928
morning
我看到了fgetl()
逐行读取数据的功能。然而,它的工作方式是,当它第一次被调用时,它会占用第一行,当它被调用第二次时,它占用第二行,然后就这样继续下去。
然而,我想做的是,阅读一行特定的内容(我可以指定(。
例如,我想先读第8行,然后读第2行和第5行。
我该怎么做?
谢谢。
以下是读取特定行的方法:
filename = 'file.txt'; % define file name
n_line = 3; % define line to read
fid = fopen(filename); % open file
result = textscan(fid, '%s', 1, 'Headerlines', n_line-1, 'Delimiter' ,''); % read line
result = result{1}; % unbox from cell
fclose(fid); % close file
如果你需要阅读几行,你可以使用如下循环:
filename = 'file.txt'; % define file name
n_lines = [3 7 4]; % define lines to read
fid = fopen(filename); % open file
result = cell(1,numel(n_lines));
for n = 1:numel(n_lines)
result(n) = textscan(fid, '%s', 1, 'Headerlines', n_lines(n)-1, 'Delimiter' ,'');
frewind(fid) % set file position back to the start
end
result = [result{:}]; % unbox from cells
fclose(fid); % close file
一个快速的方法是使用正则表达式搜索:
fr = fileread('textfile.txt');
matches = regexp(fr, '[^n]*', 'match'); % 'matches' will be a cell array. regexp search for '[^n]*' returns elements separated by newline characters.
% Lines 8, 2, and 5:
matches{8}
matches{2}
matches{5}