我想知道如何在包含所有字段名和各自值的输出文件* .txt中编写完整结构。例如
allvariables=
names='raw.txt'
date= = '**/**/2013'
User = Mr/Mrs *
timeProcessing = 20
numberIterations = 1000;
应该在output.txt中写入,之前显示所有信息。
这只是一个例子,但我的结构有50个字段名,所以我很感激任何建议!
答案 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的变体。请注意,它假定每个字段包含标量值或字符串,但当然可以扩展它以处理其他类型。
编辑:为存储字符串单元格数组和数字单元格数组的字段添加处理。