可写的没有维度名称

时间:2017-05-03 16:19:56

标签: matlab matlab-table

我正在尝试使用writetablewritetable(..., 'WriteRowNames', true)从表中写入CSV,但是当我这样做时,Matlab默认将Row放在(1,1)单元格中的CSV。我知道我可以通过设置RowmyTable.Properties.DimensionNames{1}更改为另一个字符串,但我无法将其设置为空白,因此我似乎不得不在其中添加一些文本(1,1)细胞。

有没有办法让我的CSV的(1,1)元素留空并仍然写入行名?

4 个答案:

答案 0 :(得分:3)

似乎没有办法将'DimensionNames' field中的任何字符数组设置为空或空白。一种选择是像上面那样创建.csv文件,然后使用xlswrite清除第一个单元格:

xlswrite('your_file.csv', {''}, 1, 'A1');

即使xlswrite文档声明文件参数应该是.xls,它仍然适用于我。

答案 1 :(得分:1)

另一种方法可以使用memmapfile来修改内存中文件的前导字节。

例如:

% Set up data
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(Age, Height, Weight, BloodPressure, 'RowNames', LastName);

% Write data to CSV
fname = 'asdf.csv';
writetable(T, fname, 'WriteRowNames', true)

% Overwrite row dimension name in the first row
% Use memmapfile to map only the dimension name to memory
tmp = memmapfile(fname, 'Writable', true, 'Repeat', numel(T.Properties.DimensionNames{1}));
tmp.Data(:) = 32;  % Change to the ASCII code for a space
clear('tmp');  % Clean up

这让我们来自:

Row,Age,Height,Weight,BloodPressure_1,BloodPressure_2
Smith,38,71,176,124,93
Johnson,43,69,163,109,77
Williams,38,64,131,125,83
Jones,40,67,133,117,75
Brown,49,64,119,122,80

要:

   ,Age,Height,Weight,BloodPressure_1,BloodPressure_2
Smith,38,71,176,124,93
Johnson,43,69,163,109,77
Williams,38,64,131,125,83
Jones,40,67,133,117,75
Brown,49,64,119,122,80

不幸的是没有完全删除,但这是一种有趣的方法。

或者,您可以使用MATLAB的low level file IO将行维名称后的所有内容复制到新文件中,然后覆盖原始文件:

fID = fopen(fname, 'r');
fID2 = fopen('tmp.csv', 'w');
fseek(fID, numel(T.Properties.DimensionNames{1}), 'bof');
fwrite(fID2, fread(fID));
fclose(fID);
fclose(fID2);
movefile('tmp.csv', fname);

产生:

,Age,Height,Weight,BloodPressure_1,BloodPressure_2
Smith,38,71,176,124,93
Johnson,43,69,163,109,77
Williams,38,64,131,125,83
Jones,40,67,133,117,75
Brown,49,64,119,122,80

答案 2 :(得分:-1)

不,目前不支持。我看到的唯一解决方法是使用占位符作为维度名称,然后以编程方式将其从文件中删除。

答案 3 :(得分:-1)

writetable(T,fileFullPath,'WriteVariableNames',false);

如果将“ WriteVariableNames”指定为false(默认值为true),则变量/维度名称将不会写入输出文件中。

引用链接:https://uk.mathworks.com/help/matlab/ref/writetable.html