2016-11-25 74 views
2

我對matlab或編碼方面很陌生。用dlmread讀取許多(1000+)文件 - 使用不同的文件名循環?

我正在運行一個模擬輸出數千個文件。這些文件是.vtk,可以通過dlmread正確讀取。

我試着讀取其中的一個,將其定義爲矩陣並從該矩陣中提取列向量。這工作正常。我現在需要的不僅是閱讀其中之一,而且全部。文件名因數而異,例如cover1000.vtk,cover2000.vtk,...,cover1200000.vtk。

我希望所有人都可以用dlmread讀取並存儲爲不同的矩陣。我怎麼做?以下是我現在所擁有的,在每次與一個文件的工作:

A_1000 = dlmread ('cover1000.vtk') %matrix a containing values from vtk file_in_loadpath 

fx_1000 = A(1:20,1) %extracting vector with specific values 

fx_ave_1000 = sum(fx_1000)/length(fx_1000) % average of the values in extracted vector 

我想一個循環的,但我如何創建具有不同文件名的循環? 另外我讀過循環不是最好的想法,單元格陣列會更好。但我絕對不知道如何實現這一點。

感謝您的幫助!
歡呼聲

+0

是你所有的文件存儲在一個目錄中嗎? – bushmills

+0

是的,他們是。他們的名字僅取決於數字,例如cover1000.vtk,cover2000.vtk ... 數字之間的差異通常爲1000,並且在所有文件中保持不變。 – matejmarti

回答

4

您可以使用函數dir列出目錄中的所有vtk文件,然後遍歷這些文件。

filename = dir('*.vtk'); %list all the vtk files in your current directory. 

for ii = 1:length(filename) 
A = dlmread (filename(ii).name) %matrix a containing values from vtk file_in_loadpath 
fx{ii} = A(1:20,1) %extracting vector with specific value 
fx_ave{ii} = sum(fx{ii})/length(fx{ii}) % average of the values in extracted vector 
end 

結果現在存儲在兩個單元:fxfx_ave

+0

非常感謝!這工作。唯一留給我的是找出如何訪問fx_ave中的值,但應該可以使用單元陣列上的文檔。 – matejmarti

+0

您歡迎,只需編寫:'fx_ave {1}'來訪問文件filename(1).name'的數據。 'fx_ave {2}'來訪問文件'filename(2).name'的數據... – obchardon

+0

謝謝!但不知何故,這是一個錯誤。例如,如果我提取了一個向量fx {550},例如我不提供正確的值,那麼這個值就會有點偏離。我試圖查看文件549,550,551,但沒有一個值出現在matlab中。我不知道這個錯誤會發生在哪裏,因爲fx並不是平均值,它應該顯示我在文件中看到的內容。 – matejmarti

相關問題