我有300个具有类似结构的文件。我对每个文件的第82行和第90行很感兴趣。
第82行为:
span 1=-0.193,1.980
第90行为:
span 9=0.000,557.000
我想从相邻的第82行和第90行复制最后一个数字,并从每个文件中附加这些值,如下所示:
输出文件:
1.980
557.000
2.568 687.500
1.158 496.030
……
有人能帮我吗?如果我可以将82行和90行分别复制到新文件和下面的其他文件中,也可以这样做:
span 1=-0.1931.980
span9=0.0000557.000
span 1=-0.193,2.568
span 9=0.0000687.500
span 1=-0.193,1.158
span 9=0.000,496.030
……
我们可以使用textscan
和headerlines
来跳转到所需的行。
格式规范span %d = %f, %f
告诉textscan
给我们{1}
中的span id以及{2}
和{3}
中的span值。它假定第82行和第90行的格式严格如问题中所述(即span x = y, z
(。
该代码扫描1行两次(首先在82行,然后在90行(。或者,你也可以扫描9行一次(一次扫描82-90行(,然后索引到这9行。
row1 = 82; % row of span 1
row9 = 90; % row of span 9
files = dir('/path/to/data/*.dat'); % change to real path
result = nan(length(files), 2); % preallocate
for file = files
fpath = fullfile(file.folder, file.name);
fid = fopen(fpath);
format = 'span %d = %f, %f'; % assume `span x = y, z`
lines = 1 % scan 1 line twice (we could also scan 9 lines at once and index the output)
span1 = textscan(fid, format, lines, 'headerlines', row1 - 1);
span9 = textscan(fid, format, lines, 'headerlines', row9 - row1);
if (span1{1} == 1) && (span9{1} == 9) % verify span id
result(1, :) = [span1{3} span9{3}];
end
fclose(fid);
end
csvwrite('result.csv', result);