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
.....
我们可以使用 textscan
和 headerlines
来跳转到所需的行。
格式规范 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);
我有 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
.....
我们可以使用 textscan
和 headerlines
来跳转到所需的行。
格式规范 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);