我编写了一个代码,用于从钻孔数据中提取岩性深度信息。
每个岩性都有两个深度:顶部深度和底部深度。它们看起来像这样:
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 :(得分: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'
。
基于这些示例,您可以编写一个更复杂的函数来测试每个单元格中的数据类型,并构造一个匹配的格式字符串,以防您有完全未知的数组内容。