【问题标题】:Print A Matlab Struct to a Text File将 Matlab 结构打印到文本文件
【发布时间】:2013-02-02 21:46:40
【问题描述】:

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

即命令:

富(1)

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

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

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

【问题讨论】:

  • 你考虑过日记功能吗? mathworks.com/help/matlab/ref/diary.html
  • @johnish - 我认为这正是我正在寻找的。 (实验。)是的,是的,正是我正在寻找的。将您的评论转换为答案,我很乐意接受。

标签: matlab


【解决方案1】:

diary 函数正是您所寻找的。​​p>

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 它只适用于平面结构,具有一维双精度和字符
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      老问题,但 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 上的文件等。但是如果您在硬编码上使用 evalc字符串,上例中的EGevalc('disp(whos(''a''))'),那么你应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        相关资源
        最近更新 更多