我有一个将图像打印到文件的脚本。我希望我打印的文件的名称是动态的 - 即我希望输出文件名依赖于某些参数。有点像这样:
outputFileNames = {'1.0' '1.25' '1.75'};
%....some code to determine which outputFileName I should use
f=figure('visible','off');
%.....code to populate figure .....
fname = strcat('prefix', outputFileNames(index),'suffix');
print(f,'-dpsc2', '-append',fname)
我一直收到这个错误:
Error using LocalCheckHandles (line 81)
Handle input argument contains non-handle value(s).
Error in print>LocalCreatePrintJob (line 366)
handles = checkArgsForHandleToPrint(0, varargin{:});
Error in print (line 160)
[pj, inputargs] = LocalCreatePrintJob(varargin{:});
Error in GenerateFieldPlots (line 57)
print(f,'-dpsc2', '-append',fname)
当我检查fname的值时,我得到prefix1.0suffix
(根据需要),当我检查index
的值时,我得到1
。如果我用fname = strcat('prefix', outputFileNames(index),'suffix');
替换fname = strcat('prefix', '1.0','suffix');
程序运行正常并输出到预期的文件名。
最后尝试理解这一点:
fname = strcat('prefix', outputFileNames(index),'suffix');
class(fname)
产生char
和
fname = strcat('prefix', '1.0','suffix');
class(fname)
也会产生char
。
我的问题:
为什么会这样?我的字符串数组是不是真正的字符串数组?
我该如何解决这个问题? IE,如何使输出文件的名称动态化?
上面的问题是因为我有一个很多(> 5GB)的数据需要转换成图并保存到文件中。最终,我需要在任何PC上打开的单个文档中的所有这些图(如... pdf!)。为了实现这一点,我将所有数据作为单独的页面附加到postscript文件,然后将ps转换为pdf。不幸的是ps不是很节省空间,所以我最终得到了一个巨型 .ps文件。以上是我尝试将一个巨人 .ps拆分成几个较小的,我可以依次转换为pdf(然后组合成一个单独的pdf)。这种方法非常复杂,但我一直无法找到更好的方法。您是否有更好的方法来完成我的任务?
如果我遗漏了任何可能有帮助的细节,请告诉我。我是Matlab的新手,这是我关于Matlab的第一篇SO帖子!
答案 0 :(得分:9)
请考虑以下事项:
>> x = strcat('aaa',{'bbb'},'ccc')
x =
'aaabbbccc'
>> class(x)
ans =
cell
我想你打算写:
fname = strcat('prefix', outputFileNames{index}, 'suffix');
或简单地说:
fname = ['prefix', outputFileNames{index}, 'suffix'];
请注意使用大括号而不是括号。
答案 1 :(得分:0)
你的MATLAB路径上是否还有其他名为fname的东西?
尝试
which -all fname
这将告诉您这是否是其他地方使用的名称。
答案 2 :(得分:0)
class(fname)
返回char
而不是string
是正常的:
http://www.mathworks.nl/help/matlab/ref/strings.html:
S =
'Any Characters'
创建一个字符数组或字符串。该字符串实际上是一个包含字符数字代码的向量(代码0到127是ASCII)。 S的长度是字符数。
我认为您的代码无法正常工作的原因。您确定index
是1
吗?您可以在暂停代码时放置断点并检查变量的值。我会把错误发生在一个地方,或者可能是早些时候的某些行。有关调试的更多帮助:here。