在matlab中仅覆盖csv文件的特定字段

时间:2013-07-02 21:18:31

标签: matlab csv file-io

我想将字符串的单元格数组写入csv文件,并用数字数据覆盖它们的一部分。我想,为了便于说明,我们可以使用两个矩阵:

a = ones(5,5);
b = zeros(3,3);

我想写一个csv文件,然后用b覆盖这个文件的特定字段,结果是:

1 1 1 1 1
1 1 1 1 1
1 1 0 0 0
1 1 0 0 0
1 1 0 0 0

有没有办法在matlab中执行此操作?我试过了

csvwrite('foo.csv', a);
dlmwrite('foo.csv', b, 'roffset', 2, 'coffset', 2)

但这会覆盖整个文件。我会感谢任何建议。

1 个答案:

答案 0 :(得分:0)

以下是基于Marcin建议的解决方案:

datsize = size(a);
precision = 6;
output_cell = reshape(cellstr(num2str(a(:),precision)), size(a));

for i = 3:datsize(1,1),
 for j = 3:datsize(1,2),
    output_textdata(i,j) = output_cell(i-2,j-2);
 end
end

cell2csv('foo.csv', output_textdata);

虽然这会产生预期的结果,但仍存在三个问题。首先,'精度'因细胞而异。其次,这对于该脚本的预期有限应用不是问题,如果矩阵b与矩阵a部分重叠并且部分地超过其尺寸,则该代码将产生错误,例如,b具有4×4的大小并且叠加在起始上来自(3,3)。第三,这种解决方法没有回答更一般的问题,即是否只能在matlab中覆盖csv的特定字段。