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(必要に応じて) 取得され、値を確認すると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ます。

私の質問:

  1. なぜこうなった?文字列の配列は実際には文字列の配列ではありませんか?

  2. これを修正するにはどうすればよいですか? IE、出力ファイルの名前を動的にするにはどうすればよいですか?

  3. 上記の問題は、プロットに変換してファイルに保存する必要があるデータが大量(>5GB) あるために発生します。最終的には、これらすべてのプロットを任意の PC で開くことができる 1 つのドキュメント (... 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 に答える