2

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

即,命令:

富(1)

将第一个结构体发送到屏幕,但结构体太大而无法放入滚动窗口,而且滚动窗口对于查看如此大的文本块来说是一个糟糕的工具,无论如何。我希望能够将该命令的输出直接通过管道传输到文本文件。

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

有什么方法可以强制 Matlab 将屏幕上显示的内容直接转储到文本文件中?

4

4 回答 4

7

diary功能是您正在寻找的。

于 2013-02-02T22:02:39.377 回答
1

没有用于将结构保存在文件中的默认 Matlab 函数(至少我不知道)。但是文件交换struct2File功能。

于 2013-02-02T21:59:20.703 回答
1

您可以考虑使用struct2dataset命令很好地格式化您的结果,然后再将其输出到屏幕上。

于 2013-02-02T22:09:15.077 回答
1

老问题,但 IMO,最简单的解决方案是使用evalcfunction。请参阅下面的控制台会话,尝试直接使用打印结构时失败,尝试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 上的文件等。但如果您evalc在硬编码字符串上使用,则示例中为 EG上面evalc('disp(whos(''a''))'),那你应该没问题。

于 2020-11-09T13:55:44.910 回答