【问题标题】:Write field name and value form structures to a file将字段名称和值形式结构写入文件
【发布时间】:2013-08-13 08:46:43
【问题描述】:

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

allvariables=

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

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

这只是一个示例,但我的结构有 50 个字段名的长度,所以我将不胜感激!

【问题讨论】:

标签: matlab


【解决方案1】:

这里有一些你可以使用的东西:

 %// 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 的变体。请注意,它假定每个字段都包含一个标量值或字符串,但当然可以扩展它以处理其他类型。

编辑:添加了对存储字符串元胞数组和数字元胞数组的字段的处理。

【讨论】:

  • 你能解释一下吗:cellfun(@(x){['''', x, '''']}, values(idx)),这是@(x)的名字函数和输入在哪里?
  • @R_user 当然:​​此时idx 包含一个逻辑(布尔)向量,字符串值的位置为 1。 values(idx) 提取这些字符串,生成一个字符串元胞数组(它是values 的子集)。 cellfun 迭代此元胞数组中每个元胞的内容,将其传递给@(x){['''', x, '''']} 定义的匿名函数。匿名函数只是将两个撇号(一个在开头,一个在结尾)连接到传递的字符串x
  • @R_user 之所以有四个撇号 ('''') 是因为外面的两个告诉 MATLAB 它是一个字符,而里面的两个表示它是一个撇号 (you have to use an additional apostrophe to escape it)。
  • 打印时出现错误:'未为'单元'输入定义函数'。问题是在某些领域我必须使用单元格数组。是不是有问题?
  • @R_user 这正是问题所在。就像我在回答中提到的那样,此解决方案假定字段仅存储标量或字符串。您需要对元胞数组进行特殊处理。例如,您可以尝试将它们转换为逗号分隔的字符串,以使它们显示为常规字符串字段。我已经添加了一个如何做到这一点的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2021-11-05
  • 2016-09-04
  • 2021-10-23
  • 2016-01-26
相关资源
最近更新 更多