1

我正在尝试将以下内容写入文件。

keys = {'one','two','three'}
values = [1 2 3]

到目前为止,这是我的代码:

function save_recording_results(keys,values)
    keys=keys.';
    fid = fopen('hoping', 'wt');
    fprintf(fid, '%s : %f\n', keys{:},values);
    fclose(fid);
end

我的输出是这样的:

one : 116.000000 
wo : 116.000000
hree : 1.000000
:

我希望它看起来像这样:

one : 1
two : 2
three : 3

我不确定我做错了什么。为什么它会删除第一个字符?即使第一个字符不是“t”,也会发生这种情况。我收集到它正在做的是在冒号后面的第 n 个变量的行上打印第 (n+1) 个变量的第一个字母。(T 在 ASCII 中是 116。)但是,为什么?

4

2 回答 2

1

发生的事情是,当您keys{:}返回一个 cs-list 时。基本上你正在做的是这个

printf ('%s : %f\n', 'one', 'two', 'three', [1 2 3]);

尝试键入 keys{:} 以了解我所说的 cs-list(逗号分隔列表)的含义。

因此,在解释您的格式时,它第一次需要一个字符串 (%s) 并且它工作正常,因为它找到了“一个”。第二次需要一个浮动 (%f) 但得到一个字符串 ("two")。所以将它转换成一个向量double ("two"),它是[116 119 111]第一个用于浮动。然后它需要另一个字符串(第二行)。“t”是之前使用的(转换为浮动),所以它只有“wo”,它用于字符串。以此类推,以此类推,直到最后。

以下是如何正确执行此操作。您必须创建一个包含 2 列的新单元格数组。以下应该可以正常工作。

values = num2cell (values);
new    = {keys{:}; values{:}}
printf ('%s : %f\n', new{:})
于 2012-08-26T00:03:52.127 回答
1

如果您不反对使用循环:

fid = fopen('hoping', 'wt');    
for a = 1:length(keys)
  fprintf (fid,'%s : %d\n', keys{a},values(a))
end
fclose(fid)
于 2012-08-26T00:59:10.967 回答