将空白值导出到.text文件 - MATLAB

时间:2015-03-02 15:39:44

标签: matlab

我目前正在尝试将多个不等长度的矩阵导出到分隔的.txt文件中,因此我一直用0填充较短的矩阵,以便dlmwrite可以使用horzcat而不会出错:

dlmwrite(filename{1},[a,b],'delimiter','\t')

但理想情况下,我不希望零出现在.txt文件中 - 而是将条目留空。

目前.txt文件如下所示:

55875   3.1043e+05
56807   3.3361e+05
57760   3.8235e+05
58823   4.2869e+05
59913   4.3349e+05
60887   0
61825   0
62785   0
63942   0
65159   0
66304   0
67509   0
68683   0
69736   0
70782   0

但我希望它看起来像这样:

55875   3.1043e+05
56807   3.3361e+05
57760   3.8235e+05
58823   4.2869e+05
59913   4.3349e+05
60887   
61825   
62785   
63942   
65159   
66304   
67509   
68683   
69736   
70782   

反正我能做到吗?是否有dlmwrite的替代方法,这意味着我不需要具有相同长度的矩阵?

2 个答案:

答案 0 :(得分:3)

如果a总是比b长,你可以将矢量a分成两个与矢量b相同长度的矢量,其余的是:

a = [1 2 3 4 5 6 7 8]';
b = [9 8 7 ]';

len = numel(b);
dlmwrite( 'foobar.txt', [a(1:len), b ], 'delimiter', '\t' );
dlmwrite( 'foobar.txt', a(len+1:end), 'delimiter', '\t', '-append');

答案 1 :(得分:2)

您可以读取数字数据并转换为字符串,然后添加适当的空格以将最终输出作为基于字符串的单元格数组,您可以轻松地将其写入输出文本文件。

阶段1:获取与列向量输入abc等数字数据相对应的字符串单元格 -

%// Concatenate all arrays into a cell array with numeric data
A = [{a} {b} {c}] %// Edit this to add more columns

%// Create a "regular" 2D shaped cell array to store the cells from A
lens = cellfun('length',A)
max_lens = max(lens)

A_reg = cell(max_lens,numel(lens))
A_reg(:) = {''}
A_reg(bsxfun(@le,[1:max_lens]',lens)) = cellstr(num2str(vertcat(A{:}))) %//'

%// Create a char array that has string data from input arrays as strings
wsp = repmat({'   '},max_lens,1) %// Create whitespace cell array
out_char = [];
for iter = 1:numel(A)
    out_char = [out_char char(A_reg(:,iter)) char(wsp)]
end
out_cell = cellstr(out_char)

阶段2:现在,您有out_cell作为要写入文本文件的字符串的单元格数组,接下来有两个选项可供写入操作本身使用。

选项1 -

dlmwrite('results.txt',out_cell(:),'delimiter','')

选项2 -

outfile = 'results.txt';
fid = fopen(outfile,'w');
for row = 1:numel(out_cell)
    fprintf(fid,'%s\n',out_cell{row});
end
fclose(fid);