2

我正在尝试使用writetablewith从表中编写 CSV writetable(..., 'WriteRowNames', true),但是当我这样做时,Matlab 默认放入RowCSV 的 (1,1) 单元格。我知道我可以Row通过设置更改为另一个字符串,myTable.Properties.DimensionNames{1}但我不能将其设置为空白,所以我似乎被迫在那个 (1,1) 单元格中有一些文本。

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

4

4 回答 4

3

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

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

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

于 2017-05-03T16:49:35.180 回答
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 的低级文件 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
于 2017-05-03T17:17:59.497 回答
-1

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

于 2017-05-03T16:54:31.417 回答
-1
writetable(T,fileFullPath,'WriteVariableNames',false);

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

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

于 2019-02-08T17:48:49.113 回答