如何将结构数组保存到文本文件中

时间:2013-03-17 12:15:35

标签: arrays matlab text-files structure

在MATLAB中如何将结构数组保存到文本文件中,以便显示结构数组在命令窗口中显示的所有内容?

4 个答案:

答案 0 :(得分:4)

您必须先为文件定义格式。

保存到MATLAB工作区文件(.MAT)

如果您不关心格式,并且只是希望以后能够加载数据,请使用save,例如:

save 'myfile.mat' structarr

将struct array structarr存储在名为“file.mat”的二进制MAT文件中。要将其读回工作区,您可以使用load

load 'myfile.mat'

另存为逗号分隔值(.CSV)

如果要将结构数组保存为文本文件中的逗号分隔值对,其中每对包含字段名称及其值,您可以按照以下方式进行操作:

%// Extract field data
fields = repmat(fieldnames(structarr), numel(structarr), 1);
values = struct2cell(structarr);

%// Convert all numerical values to strings
idx = cellfun(@isnumeric, values); 
values(idx) = cellfun(@num2str, values(idx), 'UniformOutput', 0);

%// Combine field names and values in the same array
C = {fields{:}; values{:}};

%// Write fields to CSV file
fid = fopen('myfile.csv', 'wt');
fmt_str = repmat('%s,', 1, size(C, 2));
fprintf(fid, [fmt_str(1:end - 1), '\n'], C{:});
fclose(fid);

此解决方案假设每个字段都包含标量值或字符串,但您可以根据需要扩展它。

答案 1 :(得分:4)

我知道这个帖子已经老了,但我希望它还能帮助别人:

我认为这是一个较短的解决方案(约束条件是每个struct字段都可以包含标量,数组或字符串):

%assume that your struct array is named data
temp_table = struct2table(data);
writetable(temp_table,'data.csv')

现在您的struct数组存储在data.csv文件中。列名是结构的字段名称,行是struct-array

的不同单结构

答案 2 :(得分:1)

要将任何数据类型转换为MATLAB命令窗口中显示的字符向量,请使用函数

str = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(yourArray);

然后,您可以将内容写入文件

fid = fopen('myFile.txt', 'w'); 
fwrite(fid, str, '*char');
fclose(fid);

答案 3 :(得分:-2)

使用fprintf

  

fprintf(fileID,formatSpec,A1,...,An)将formatSpec应用于所有   数组A1,...的元素按列顺序,并将数据写入a   文本文件。 fprintf使用调用中指定的编码方案   的fopen。