2016-01-21 15 views
0

我正在使用此代碼,基於一些以前的用戶示例。我試圖讀取指定目錄中的ascii文件,並且只讀取每個文件中的前80行數據(最初共1020行和2列)。 這個例程不會給我帶來錯誤,但是我不清楚數據是如何存儲在MATLAB中的,以及如何操縱我剛剛創建的80行的每個新的矩陣。我可以給每個.asc文件截斷一個新的文件名或矩陣分配嗎?接下來我需要在每個文件的80行上執行峯值查找算法,因此我需要將它們中的每一個分別存儲。謝謝!截斷後在目錄中保存多個矩陣

folder = fullfile('Users', ...'Documents', 'MATLAB'); 

f = dir(fullfile(folder, '*.asc')); 

    matrices = struct(); 

     for ii = 1 : numel(f) 

      name = fullfile(folder, f(ii).name); 
      O = dlmread(name); 
     matrices.(f(ii).name) = O(1:80,:); 
     end 
+0

也許做'矩陣{II} = O(1 :80,:)'。 – David

+0

那麼你也必須刪除行矩陣= struct() –

回答

0

這是行不通的。

循環循環目錄中的所有文件。每個文件被讀取到一個臨時矩陣O,從中只有前80行被存儲到結構矩陣中。 但是:矩陣結構將以相應的asc文件的完整文件名引用,即,blabla.asc

Matlab結構以點引用,因此禁止在結構的字段名稱中使用點。

改變您的代碼:

f = dir(fullfile(folder, '*.asc')); 
matrices = struct(); 
for ii = 1 : numel(f) 
    name = fullfile(folder, f(ii).name); 
    O = dlmread(name); 
    prf_sff = strsplit(f(ii).name, '.') 
    matrices.(prf_sff{1}) = O(1:80,:); 
end 

然後可以參考包含第一80行blabla.asc的與基質:

matrices.blabla 
+0

謝謝,@johannes_lalala。我不清楚你的建議。我輸入你的建議(沒有matrices.myname這一行),得到:refname = strsplit(f(ii).name,'。')[1] 錯誤:不平衡或意外括號或括號。但是,David對矩陣{ii} = O(1:80,:)的建議確實有效,編譯時我沒有錯誤。我不清楚是否簡單地替換了David對此矩陣行的建議,並且除了刪除矩陣之外不更改其他任何內容= struct()將分別存儲每個ascii文件的前80行或重寫它們。謝謝! – Svet

+0

啊是的。我更新了我的答案。 David和原來的解決方案都將所有的矩陣保存在一個稱爲矩陣的「容器」中。什麼都不會被覆蓋。大衛解決方案中的單元陣列,另一箇中的結構。 區別在於你如何訪問矩陣。在David的解決方案中,您可以使用矩陣{x}訪問矩陣,其中x是一個數字。那麼你必須謹慎處理文件的順序!在您的原始解決方案中,您可以通過文件名訪問矩陣。我將它改爲文件名的前綴(沒有.asc)。即像這樣:matrices.fileprefix –