我有一个Matlab程序,它生成一组非常大的结构作为输出 结构足够大,我希望能够将文本表示打印到文本文件中供以后学习。
即,命令:
FOO(1)
将第一个结构发送到屏幕,但结构太大而无法放入滚动窗口,滚动窗口无论如何都是查看这么大块文本的糟糕工具。我希望能够将该命令的输出直接传递给文本文件。
不幸的是,没有为结构中的某些元素定义fprintf,因此fprintf失败。同样,我相信作为Psychtoolbox库的一部分的WriteStructsToText.m脚本也失败了。
有没有办法强迫Matlab将屏幕上显示的内容直接转储到文本文件中?
答案 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上,那么您应该没事。