2

我有一个将图像打印到文件的脚本。我希望我打印的文件名是动态的 - 即我希望输出文件名取决于某些参数。有点像这样:

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(根据需要),当我检查indexI get的值时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

我的问题:

  1. 为什么会这样?我的字符串数组不是真正的字符串数组吗?

  2. 我该如何解决?IE,如何使输出文件的名称动态化?

  3. 出现上述问题是因为我有很多(> 5GB)数据需要转换为绘图并保存到文件中。最终,我需要将所有这些图都放在一个可以在任何 PC 上打开的文档中(比如……pdf!)。为了做到这一点,我将我所有的数字作为单独的页面附加到后记文件中,然后将 ps 转换为 pdf。不幸的是,ps 的空间效率不是很高,所以我最终得到了一个巨大的.ps 文件。以上是我尝试将一个巨大的 .ps 分解成几个较小的,我可以依次转换为 pdf(然后组合成一个 pdf)。这种方法非常复杂,但我一直找不到更好的方法。您对完成我的任务的更好方法有什么建议吗?

如果我遗漏了任何可能有用的细节,请告诉我。我是 Matlab 的新手,这是我关于 Matlab 的第一篇 SO 帖子!

4

3 回答 3

9

考虑以下:

>> x = strcat('aaa',{'bbb'},'ccc')
x = 
    'aaabbbccc'

>> class(x)
ans =
cell

我想你的意思是写:

fname = strcat('prefix', outputFileNames{index}, 'suffix');

或者简单地说:

fname = ['prefix', outputFileNames{index}, 'suffix'];

注意使用大括号而不是括号。

于 2013-09-13T07:05:55.317 回答
0

您的 MATLAB 路径上是否有其他名为 fname 的内容?

尝试

which -all fname

这将告诉您这是否是其他地方使用的名称。

于 2013-09-13T05:15:35.303 回答
0

class(fname)返回char而不是正常是正常的string

http://www.mathworks.nl/help/matlab/ref/strings.html

S ='Any Characters'创建一个字符数组或字符串。字符串实际上是一个向量,其中包含字符的数字代码(代码 0 到 127 是 ASCII)。S的长度是字符数。

我看不出您的代码无法正常工作的任何原因。你确定那个index存在1吗?您可以在暂停代码时放置断点并检查变量的值。我会在发生错误的地方放一个,或者更早一些。更多调试帮助:这里

于 2013-09-13T07:04:50.393 回答