没有维度名称的可写

writetable without dimension names

我正在尝试使用 writetablewritetable(..., 'WriteRowNames', true) 从 table 编写 CSV,但是当我这样做时,Matlab 默认将 Row 放在CSV 的 (1,1) 单元格。我知道我可以通过设置 myTable.Properties.DimensionNames{1}Row 更改为另一个字符串,但我不能将其设置为空白,所以看起来我被迫在其中包含一些文本 (1,1)细胞。

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

似乎没有任何方法可以设置 'DimensionNames' field to either empty or whitespace. One option is to create your .csv file as you do above, then use xlswrite 中的任何字符数组以清除第一个单元格:

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

即使 xlswrite 文档指出文件参数应该是 .xls,它对我来说仍然可以正常工作。

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

另一种方法可以使用 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
writetable(T,fileFullPath,'WriteVariableNames',false);

当指定 'WriteVariableNames' 为 false(默认为 true)时,variable/dimension 名称将不会写入输出文件。

参考 link:https://uk.mathworks.com/help/matlab/ref/writetable.html