将Matlab结构打印到文本文件

时间:2013-02-02 21:46:40

标签: matlab

我有一个Matlab程序,它生成一组非常大的结构作为输出 结构足够大,我希望能够将文本表示打印到文本文件中供以后学习。

即,命令:

  

FOO(1)

将第一个结构发送到屏幕,但结构太大而无法放入滚动窗口,滚动窗口无论如何都是查看这么大块文本的糟糕工具。我希望能够将该命令的输出直接传递给文本文件。

不幸的是,没有为结构中的某些元素定义fprintf,因此fprintf失败。同样,我相信作为Psychtoolbox库的一部分的WriteStructsToText.m脚本也失败了。

有没有办法强迫Matlab将屏幕上显示的内容直接转储到文本文件中?

4 个答案:

答案 0 :(得分:7)

您正在寻找diary功能。

答案 1 :(得分:1)

没有默认的Matlab函数来保存文件中的struct(至少我不知道)。但文件交换上有struct2File功能。

答案 2 :(得分:1)

在屏幕上输出结果之前,您可以考虑使用struct2dataset命令很好地格式化结果。

答案 3 :(得分:1)

一个老问题,但是IMO,最简单的解决方案是使用evalc function。请参阅下面的控制台会话,当尝试直接使用fprintf打印结构以及尝试使用disp的输出时失败,但在使用evalc时成功:

>> a = [1 2 3; 4 5 6]

a =

     1     2     3
     4     5     6

>> disp(whos('a'))
          name: 'a'
          size: [2 3]
         bytes: 48
         class: 'double'
        global: 0
        sparse: 0
       complex: 0
       nesting: [1×1 struct]
    persistent: 0

>> fprintf('%s\n', whos('a'))
Error using fprintf
Function is not defined for 'struct' inputs.
 
>> fprintf('%s\n', disp(whos('a')))
Error using disp
Too many output arguments.
 
>> fprintf('%s\n', evalc('disp(whos(''a''))'))
          name: 'a'
          size: [2 3]
         bytes: 48
         class: 'double'
        global: 0
        sparse: 0
       complex: 0
       nesting: [1×1 struct]
    persistent: 0


>> 

evalc是R2006a之前引入Matlab的,因此您应该没有兼容性问题。

只要可以信任将用作输入的任何内容,只需确保仅使用evalc函数; EG,如果您允许evalc的输入是通过用户输入生成的,则用户可能会输入恶意代码,例如EG可能会运行系统命令来破坏PC上的文件等。但是,如果您使用{{1} } evalc上面的示例中的硬编码字符串EG上,那么您应该没事。