Matlab:将某些行从文本文件复制到另一个文件

Matab: copy certain rows from text files to another file

我有 300 个结构相似的文件。 我对每个文件中的第 82 行和第 90 行感兴趣。

第 82 行是:
跨度 1 = -0.193,1.980

第 90 行是:
跨度 9 = 0.000,557.000

我想复制第 82 行和第 90 行的最后一个数字,并从每个文件中追加这些值,如下所示:

输出文件:

1.980 557.000
2.568 687.500
1.158 496.030
......

有人可以帮助我吗?如果我可以将第 82 行和第 90 行分别复制到新文件和该文件下的其他行,也可以,如下所示:

跨度 1 = -0.193, 1.980
跨度 9 = 0.000, 557.000

跨度 1 = -0.193, 2.568
跨度 9 = 0.000, 687.500

跨度 1 = -0.193, 1.158
跨度 9 = 0.000, 496.030
.....

我们可以使用 textscanheaderlines 来跳转到所需的行。

格式规范 span %d = %f, %f 告诉 textscan 给我们 {1} 中的跨度 ID 和 {2}{3} 中的跨度值。它假定第 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);