我在这里分享我的一个数据,它位于.dat文件中。我有16162个不同的文件。我将所有文件合并到一个文件中,并希望在matlab中读取它,并且需要从单个文件中提取三个参数值,并按行或列方式排列。我可以通过使用C sharp代码来实现,但我想通过使用matlab来实现。有人可以帮我写出代码吗?
以下是一个示例文件数据:
DISTRIBUTION: monomodal log-normal
n : 1.000
r_mod: .010
sigma: 1.400
number conc., surface. conc., volume conc.
.1087E+01 .1866E-02 .7878E-05
part. ave. radius, surf. ave. radius, vol. ave. radius :
.1149E-01 .1169E-01 .1201E-01
surface mean radius, volume mean radius :
.1267E-01 .1392E-01
eff. variance :
.9939E-01
让我们说:我想提取或读取三个参数(r_mod,sigma,Surface表示半径)。我在此页面中放入的文件中这三个参数的相应值是.010,1.400,.1267E-01
输出应该是(我想要的):
r_mod sigma surface mean radius .01 1.4 1.27E-02 .02 1.4 2.67E-02 .03 1.4 3.98E-02 ... .. .. .. .. .. .. .. ..
我在同一目录中有超过数千个类似的文件。我想在matlab中读取所有这些文件,输出应该以这种方式显示在一个文件中。
答案 0 :(得分:0)
鉴于所有文件具有完全相同的结构,以下将完成这项工作(只需确保在代码中重新编写注释,您需要调整文件名和要读取的文件数):
n = 2; % Number of files you want to go through
vals = zeros(1,3*n);
str = 'r_mod sigma surface mean radius ';
k = 1;
for i = 1:n
path = ['myFile',num2str(i),'.dat']; % change this to fit your file names
fid = fopen(path, 'rb');
data = textscan(fid,'%s');
fclose(fid);
data = data{1};
vals(k) = str2double(data{8});
vals(k+1) = str2double(data{10});
vals(k+2) = str2double(data{40});
k = k+3;
end
out = [str, num2str(vals)];
fid = fopen('output.txt', 'w');
fprintf(fid,out);
文件output.txt现在包含您想要的行。如果您希望输出文件也是.dat,则可以更改格式。