0

内容が後でプロットされる txt ファイルのファイル名をユーザーに尋ねるスクリプトを作成しようとしています。

filename = input('What is the filename (without the extension) e.g. RCP6: ','s');
if isempty(filename)
    filename=input('What is the filename (without the extension) e.g. RCP6: ','s');
end

ext =  input('What is the filetype (extension) e.g. .txt: ','s');
if isempty(ext)
    ext=input('What is the filetype (extension) e.g. .txt: ','s');
end

filew = strcat(filename,ext)

load(filew)
A = filename
Y = A(:,1)
E = A(:,2)

plot(Y,E)
xlabel('calendar year')
ylabel('annual fossil carbon emissions (GtC)')

書かれているように、コードは filename と ext を正しく連結しますが、load (filew) がそのファイルを正しくロードしているようには見えません。 RCP3PD.txt の値の列?

助言がありますか?他の「文字列からファイルをロードする」スレッドが sprintf() 関数を参照しているのを見たことがありますが、それはここに当てはまりますか?

4

1 に答える 1

0

データをロードするときは、何かとして保存する必要があります。そう :

load(filew)

次のように見えるはずです

data = load(filew);

次に、変数にアクセスするには、次を使用します。

A = data.A; % assume that data is a struct with a field named A
Y = A(:,1);
E = A(:,2);

他の考え

ファイル名を入力するためのロジックを次のように変更することを検討してください。

valid = 0;
while(valid==0)
  filename = input('What is the filename (without the extension) e.g. RCP6: ','s');
  ext =  input('What is the filetype (extension) e.g. .txt: ','s');
  if exist([filename, ext], 'file')
    valid = 1;
  end
end

ファイル名が空かどうかを確認する代わりに、ユーザーが実際に存在するファイル名/拡張子のペアを提供したかどうかを確認します。そうでない場合は、彼らがそうするまで尋ね続けます。

派手にしたい場合はuigetfile、ユーザーにファイル名を入力するように求める代わりに使用できます。これにより、ユーザーにファイル ピッカー ウィンドウが表示され、ユーザーが有効なファイルを選択したことがわかります。さらに、ユーザーが選択できるファイルをフィルタリングできます。

于 2012-08-08T17:53:08.153 に答える