2

2 つの質問があります。

  1. MATLAB で開いている 12 個の図 (別の関数によって既に生成されている図 1 ~ 12) があり、それらすべてをファイルに出力したいだけでなく、プリンターにも出力したいと考えています。そのためのコードをどのように書くことができますか?フィギュアのハンドルを取得することについてはすでに読みましたが、その意味とその後の印刷方法を実際には理解していませんでした。

  2. 多くの Excel ファイルから MATLAB にデータをインポートするスクリプトを作成しました。Excel ファイルの名前は、個人の名前/コード (情報の対象者) を含む最初の部分だけが異なるように名前が付けられています。

私のスクリプトは次のようになります。

Indi1_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_T_SFTW12')
Indi1_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_V_SFTW12')

Indi2_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_T_SFTW12')
Indi2_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_V_SFTW12')

Indi3_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_T_SFTW12')
Indi3_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_V_SFTW12')

Indi4_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_T_SFTW12')
Indi4_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_V_SFTW12')

そして、それは他の多くの人にも続きます。

ご覧のとおり、個人ごとにコードを繰り返しています。ループ関数で単純化できますか?

PS: インポートされたデータはすべて数値です。

4

1 に答える 1

4

弾丸No. 1:

私はmatlabで開いている図を持っていて、それらをすべてファイルに印刷したいだけでなく、プリンターにも印刷したいと考えています。

printこの目的のためのコマンドがあります。たとえば、Figure のハンドルを指定するだけです。

print(h)                      %// Send figure with handle h to printer
print(h, '-djpeg', filename)  %// Save figure with handle h to a JPEG file

弾丸No. 2:

...ループ関数で簡略化できますか?

はい、できます。次のようなことができます。

N = 4; %// Number of Excel files
C = cells(2 * N, 1);
for k = 1:2 * N
    filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
    C{k} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
    C{k + 1} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
end

これで、すべてのデータがセル配列に格納されましたC


説明

xlsreadの出力をセル配列に格納する予定です。ファイルがNあり、ファイルごとに 2 つのワークシートからデータを読み取っているため、セル配列Cはセルで初期化され2 * Nます。

ループは各ファイルを反復処理し、コマンドと反復カウンターforを使用してファイル名を作成します。sprintfk

filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);

ここでの結果は変数filenameに格納され、コマンドに渡されxlsreadます。シート名も を使用して作成され、最初に変数に格納されることなく にsprintf直接渡されます。xlsread

Q:ファイル名を変数に保存し、シート名を保存しないのはなぜですか?
A: ファイル名を 2 回作成したくないという理由だけでファイル名を変数に格納することにしましたが、シート名は 1 回しか作成されないため、それぞれを変数に格納しても意味がありません。

ループの後、データ全体が cell 配列 に格納されCます。C で i 番目の要素 (セル) にアクセスするには、中かっこ ( {}) を使用します。たとえば、2 番目のセルにアクセスするには、次のように記述しC{2}ます。

Q:なぜセル配列なのですか? A: セル配列では、各セルに異なる型と長さのデータを含めることができます。たとえば、{2, 'hello'} は 2 つのセルを含むセル配列です。1 つは数値 2 を含み、もう 1 つは文字列 "hello" を含みます。 . xlsreadが同じ長さのデータを返すことを保証できないため、単純な行列を使用してすべてのファイルの内容を格納することはできませんでした。

お役に立てれば!

于 2013-01-23T11:43:26.060 に答える