1

在这里,我分享了我在 .dat 文件中的一个数据。我有 16162 个不同的文件。我将所有内容合并到一个文件中,并希望在 matlab 中读取它,需要从单个文件中提取三个参数的值,并将它们按行或按列排列。我可以通过使用 C 尖锐代码来做到这一点,但我想通过使用 matlab 来做到这一点。有人可以帮我写代码吗?

这是一个示例文件数据:

分布:单峰对数正态 n:1.000 r_mod:0.010 sigma:1.400

数浓度,表面。浓度,体积浓度 (cm^-3) (mu^2cm^-3) (mu^3cm^-3) .1087E+01 .1866E-02 .7878E-05

部分。大道 半径,冲浪。大道 半径,卷。大道 半径:.1149E-01 .1169E-01 .1201E-01

表面平均半径,体积平均半径:.1267E-01 .1392E-01

效果。差异:.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 中读取所有这些文件,并且输出应该以这种方式显示在单个文件中。

4

1 回答 1

1

如果除了数值之外所有文件都完全相同,您可以尝试使用 Matlab 函数textscan并指定每行的格式。

这是一个如何做到这一点的示例:

fid=fopen('text.dat','r');
format={'DISTRIBUTION: monomodal log-normal n : %f r_mod: %f sigma: %f'; ...
        'number conc., surface. conc., volume conc. (cm^-3) (mu^2cm^-3) (mu^3cm^-3) %f %f %f'; ...
        'part. ave. radius, surf. ave. radius, vol. ave. radius : %f %f %f'; ...
        'surface mean radius, volume mean radius : %f %f'; ...
        'eff. variance : %f'};
data=cell(numel(format),1);
for i=1:numel(format)
    data{i}=textscan(fid,format{i},1);
end
fclose(fid);

在此示例中,您可以访问元胞数组中的数值data,r_mod 是data{1}{2},sigma 是data{1}{3},Surface 表示半径是data{4}{1}等等。然后只需组织这些数据并将集合保存到文件中fprintf,用于写入标题和dlmwrite附加数据。

于 2012-04-03T14:22:00.637 回答