将字段名称和值表单结构写入文件

时间:2013-08-13 08:46:43

标签: matlab

我想知道如何在包含所有字段名和各自值的输出文件* .txt中编写完整结构。例如

allvariables=

names='raw.txt'
date= = '**/**/2013'
User = Mr/Mrs *
timeProcessing = 20
numberIterations = 1000;

应该在output.txt中写入,之前显示所有信息。

这只是一个例子,但我的结构有50个字段名,所以我很感激任何建议!

1 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

 %// Extract field data
fields = fieldnames(allvariables);
values = struct2cell(allvariables);

%// Optional: add enclosing apostrophes around string values
idx = cellfun(@ischar, values); 
values(idx) = cellfun(@(x){['''', x, '''']}, values(idx));

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

%// Convert cell arrays of strings to comma-delimited strings
idx = cellfun(@iscellstr, values);
stringify_cellstr = @(x){['{' sprintf('''%s'', ', x{1:end - 1}) ...
   sprintf('''%s''', x{end}) '}']};
values(idx) = cellfun(stringify_cellstr, values(idx));

%// Convert cell array of numbers to strings
idx = cellfun(@iscell, values);
isnumber = @(x)isnumeric(x) && isscalar(x);
idx_num = cellfun(@(x)all(arrayfun(@(k)isnumber(x{k}),1:numel(x))), values(idx));
idx(idx) = idx_num;
stringify_cellnum = @(x){['{' sprintf('%d, ' x{1:end - 1}) num2str(x{end}) '}']};
values(idx) = cellfun(stringify_cellnum, values(idx));

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

%// Write fields to text file
fid = fopen('output.txt', 'wt');
fprintf(fid, repmat('%s = %s\n', 1, size(C, 2)), C{:});
fclose(fid);

此解决方案基本上是this one的变体。请注意,它假定每个字段包含标量值或字符串,但当然可以扩展它以处理其他类型。

编辑:为存储字符串单元格数组和数字单元格数组的字段添加处理。