可写的Matlab(附录?)

时间:2015-01-20 10:46:50

标签: matlab class built-in

如果你有一个表类" T"

T =

Var1      Var2      Var3    Var4 
____    ________    ____    _____

M       45    45    'NY'    true 
F       41    32    'CA'    false
M       40    34    'MA'    false

并且您希望将值写入可以使用的文件中,例如:

  
    

可写(T,' myData.txt',' Delimiter',...)

  

但这会删除myData.txt中的所有信息。我想知道是否有表的附加函数,或者某种方式写入而不删除myData.txt的旧内容。

所以,图片:

  
    

输入myData.txt

  

您好

  
    

可写(T,...)

         

输入myData.txt

  

您好

Var1 Var2 Var3 Var4

M       45    45    'NY'    true 
F       41    32    'CA'    false
M       40    34    'MA'    false

2 个答案:

答案 0 :(得分:2)

一种方法是使用fopen()写入文件。创建表:

LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
T = table(LastName,Age,Height,Weight)

写下文件:

writetable(T,'table.csv')

再次打开文件:

fid = fopen('table.csv','a')

第二次写出表格:

fmt = varfun(@(x) class(x),T,'OutputFormat','cell');
fmt(strcmp(fmt,'double'))={'%g'};
fmt(strcmp(fmt,'cell'))={'%s'};
fmt=[strjoin(fmt,',') '\n']
for r=1:size(T,1)
  x=table2cell(T(r,:));
  fprintf(fid,fmt,x{:});
end
fclose(fid);

答案 1 :(得分:0)

Bob的答案非常适合小桌子。对于大型表,为避免for循环,我建议将第二个表写入第二个文件,然后您可以合并这些文件。这是代码:

writetable(T1,'data_01.csv');
writetable(T2,'data_02.csv','WriteVariableNames',false);

您不希望在第二个文件上包含变量名称,以便您可以将文件完美地合并到新文件中。如果你在Linux上,你可以做:

cat data_*.csv >> data.csv

而且,如果表格非常大,我建议使用'datastore'。这是一个代码:

writetable(T1,'data_01.csv');
writetable(T2,'data_02.csv');

这里我们应该将variableNames保留在第二个文件中,这样数据存储区功能就可以正确读取文件:

ds = datastore('data_*.csv');

然后,您可以使用“读取”功能逐片读取,或使用“readall”功能完全读取,具体取决于您的需要。请检查文件。