从matlab中的.dat文件中读取文本和数字数据

时间:2012-04-03 05:15:51

标签: matlab merging-data

我在这里分享我的一个数据,它位于.dat文件中。我有16162个不同的文件。我将所有文件合并到一个文件中,并希望在matlab中读取它,并且需要从单个文件中提取三个参数值,并按行或列方式排列。我可以通过使用C sharp代码来实现,但我想通过使用matlab来实现。有人可以帮我写出代码吗?

以下是一个示例文件数据:

分布:单峰对数正常  n:1.000  r_mod:.010  西格玛:1.400

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

一部分。 AVE。半径,冲浪。 AVE。 radius,vol。 AVE。半径:   .1149E-01 .1169E-01 .1201E-01

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

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

1 个答案:

答案 0 :(得分: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附加数据。