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

asd*_*wer 5 arrays matlab structure text-files

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

v.t*_*ala 5

我知道这个线程很旧,但我希望它仍然可以帮助某人:

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

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

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


Eit*_*n T 4

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

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

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

save 'myfile.mat' structarr
Run Code Online (Sandbox Code Playgroud)

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

load 'myfile.mat'
Run Code Online (Sandbox Code Playgroud)

保存为逗号分隔值 (.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);
Run Code Online (Sandbox Code Playgroud)

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