2017-05-24 35 views
1

我一直在努力編寫讀取.txt數據的代碼。我在一個通過'img4200.txt'所有文件名都是'img0001.txt'的目錄中。每個文件都是相同大小(480x640)的二維數組,最終我想填充一個3-D數據立方體,但首先我需要能夠讀取所有數據。範圍檢查失敗在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,語句和大於和小於運算符的不同版本。我也嘗試使用eval和加載命令。

謝謝。

+1

我敢肯定有周圍幾個重複的,但嘗試用[格式規範]玩耍(https://www.mathworks.com/help/matlab/ref/num2str.html#inputarg_formatSpec)參數。具體來說,'num2str(i,'%04d')'。那麼你不需要'if/else'。 – beaker

回答

1

m7913d的回答解釋了你的if語句的邏輯,而是一種很好的方式,以避免混亂將是刪除if語句完全使用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

謝謝!我不知道如何填補數字。我仍然不確定何時使用if語句而不是for循環。 –

+0

我不確定你的意思,如果語句和for循環用於不同的事情?如果此答案可解決您的問題,請考慮將其標記爲已接受 – Wolfie

1

您檢查範圍的條件是錯誤的。你應該如下寫:

elseif 10 <= i && i < 100 

你計算什麼是以下(爲i == 100解釋):

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

注意很多編程語言(C++,Java,js,...)都是這種情況。

+0

謝謝!這是一個非常好的解釋。 –