如何将许多单元格写入文本文件

时间:2012-04-29 01:53:29

标签: matlab

我编写了一个代码,用于从钻孔数据中提取岩性深度信息。

每个岩性都有两个深度:顶部深度和底部深度。它们看起来像这样:

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

每种类型的岩性都有不同的细胞尺寸。

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

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

似乎我可以使用dmwrite,但是我在编写数据矩阵方面遇到了问题,因为每种类型的岩石都有两个深度。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

对于字符串的单元格数组,我使用以下简单函数,该函数放在C:\Users\NAME\Documents\MATLAB\@cell或平台上的等效用户路径(~/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'

基于这些示例,您可以编写一个更复杂的函数来测试每个单元格中的数据类型,并构造一个匹配的格式字符串,以防您有完全未知的数组内容。