2012-04-03 646 views
1

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

这里是一个示例文件数据:

DISTRIBUTION:单峰对数正态 N:1.000 r_mod:0.010 西格玛:1.400

数浓,表面。浓度,体积浓度(cm^-3)(mu^3cm^-3) .1087E + 01.1866E-02.77878E-05

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

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

EFF。方差: .9939E-01

假设我想提取或读取三个参数(r_mod,sigma,Surface表示半径)。从我把这个页面文件这三个参数对应的值是0.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

如果您的所有文件除了数值之外都是完全相同的,您可以尝试使用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},西格玛是data{1}{3}和表面是指半径是data{4}{1}等等。然后,只需组织这些数据并使用fprintf将文件集保存到文件中,即可编写标题,然后使用dlmwrite来追加数据。

+0

嗨,Aabaz。非常感谢您的代码和解释。 – mmenvo 2012-04-08 03:20:46