2012-04-29 76 views
1

我编写了一个代码,用于从钻孔数据中提取岩性深度信息。如何将多个单元格写入文本文件

每个岩性有两个深度:顶部深度和底部深度。他们是这样的:

Sandstone '830.212' '828.222' 
Siltstone '832.612' '830.922' 

每种类型的岩性具有细胞的不同层面。

sandstone 12*2 cell 
coal 1*2 cell 
mudstone 14*2 cell etc. 

如何将这些信息写入文本文件?

好像我可以使用dmwrite,但我有问题,形成了二维条码,因为每种类型的岩石有两个深度。

这怎么办?

+0

您能澄清那些单元格元素实际上是*字符串*而不是*数字*吗?我的答案假设他们是字符串。 – 2012-04-29 07:44:03

+0

嗨reve_etrange,每个单元格元素都是数字。其实,他们是字符串,无论如何,我可以使用str2double改变它们。问题是我有许多不同的单元阵列,如砂岩,泥岩,煤炭等。每个单元阵列有不同的尺寸,如砂岩单元阵列有12 * 2个单元。所以我想创建一个DataMatrix,然后使用dmwrite将这些单元格写入文本文件。 – Lei 2012-04-29 15:56:28

回答

1

对于字符串的单元阵列,我使用下面的简单的功能,其被放置在C:\Users\NAME\Documents\MATLAB\@cell或等效userpath平台(~/Documents/MATLAB/@cell)上。 @cell名称通知MATLAB,@cell中的函数仅用于单元阵列。

function csvwrite(fileName,cellArray) 

fid = fopen(fileName,'w'); 
for i=1:size(cellArray,1) 
    fprintf(fid,'%s,',cellArray{i,1:end-1}); 
    fprintf(fid,'%s\n',cellArray{i,end}); 
end 
fclose(fid); 

如果您需要传统的Windows/DOS行结束,在第二fprintf调用替换 “\ n” 和 “\ n \ r”。如果你想要标签,你也可以用“\ t”替换第一次调用中的“,”。

对于数字阵列可以使用附带的MATLAB功能csvwrite

如果必须使用具有混合数据类型单元阵列,该函数必须被修改以接受的格式说明的阵列。

function csvwrite(fileName,cellArray,spec) 

fid = fopen(fileName,'w'); 
for i=1:size(cellArray,1) 
    fprintf([spec '\n'],cellArray{i,1:end}); 
end 
fclose(fid); 

对于具有类似的行数组:{ 1 3 5 'string1' string2' }你会用spec = '%d,%d,%s,%s',例如。基于这些实施例

可以编写一个更复杂的函数,测试数据的类型在每个小区中,并构造一个格式字符串相匹配,如果你将不得不完全未知的数组的内容。

+0

嗨reve_etrange 感谢您的帮助!我刚看到你的答案。我会看看这个。这真的有帮助! – Lei 2012-04-29 15:24:36

相关问题