2017-05-24 7 views
1

私は、.txtデータを読み込むコードを書くのに苦労しています。私はすべてのファイル名が 'img000.txt'から 'img4200.txt'までのディレクトリにあります。各ファイルは同じサイズ(480x640)の2次元配列であり、最終的に3次元データキューブを塗りたいが、最初にすべてのデータを読み込む必要がある。Matlabの.txtファイルをロードするための範囲チェックが失敗する

for i = 1:4200 
    i 
    if i<10 
     A = csvread(['img000',num2str(i),'.txt']); 
    elseif 10<=i<100 
     A = csvread(['img00',num2str(i),'.txt']); *** 
    elseif 100<=i<1000 
     A = csvread(['img0',num2str(i),'.txt']); 
    else i>=1000 
     A = csvread(['img',num2str(i),'.txt']); 
    end 
end 

コードがi=100を印刷し、その後、私が***追加した行に見つからないファイルのエラーメッセージを表示します。コードは存在しないファイルimg00100.txtを探していますが、なぜこれを行うのか分かりません。

私は、異なるバージョンのif、elseif、statements、およびより大きい、より小さい演算子を使って遊んでいます。私もevalとloadコマンドを使ってみました。

ありがとうございます。

+1

私の周りにいくつかの重複があると確信しているが、[フォーマット仕様](https://www.mathworks.com/help/matlab/ref/num2str.html#inputarg_formatSpec)で遊んでみてくださいパラメータ。具体的には、 'num2str(i、 '%04d')'です。そうすれば 'if/else'は必要ありません。 – beaker

答えて

1

m7913dの答えは、文のロジックが、混乱を避けるために良い方法はになるならば、あなたの文が完全に使用している場合sprintfを取り外しについて説明します。

for i = 1:4200 
    filenum = sprintf('%04d', i);    % Zero pads the number e.g. 59 => 0059 
    disp(['i =', filenum])      % Display current i 
    A = csvread(['img', filenum, '.txt']);  % Load CSV 
end 
+0

ありがとうございました!番号をゼロにする方法がわからなかった。 forループとは対照的に、ifステートメントをいつ使用するかはまだ分かりません。 –

+0

ステートメントとforループが別のものに対応しているかどうかわかりません。この回答によって問題が解決された場合は、それを承認済みとしてマークすることを検討してください – Wolfie

1

範囲を確認する条件が間違っています。次のようにあなたはそれを書く必要があります。

あなたが計算何
elseif 10 <= i && i < 100 

は以下の通りです(i == 100で説明):

10 <= i < 100 < =>(10 <= i) < 100 < =>(1) < 100 < =>1

注意していますこれは多くのプログラミング言語(C++、java、js、...)の場合です。

+0

ありがとう!これは非常に良い説明です。 –

関連する問題