2012-10-01 93 views
2

我有一個文本文件,其中包含大量數據行,其中列由空格分隔。我如何使用MATLAB讀取這些數據?我曾嘗試下面的代碼沒有成功:從大型文本文件中讀取Matlab中的數據

fid = fopen('file.txt'); 

M = textscan(fid, '%f %f %f'); 

x = M{1}; 

y = M{2}; 

z = M{3}; 

的數據如下圖所示(列不等距):

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 

4.55686 0.88751 4.71368  0.00000  0.00000 879.7 0.143 1.77 1 1 Iron - Alpha 
+0

你能指定「無法」是什麼意思嗎? –

+0

matlab沒有從不同的列中隨意取數據。 – metal

+0

打開記事本並用「;」替換所有空格在一個行動! – user702846

回答

3

首先,考慮你的數據文件。每行包含10個數字和3個字符串。很容易認爲它包含10個數字和1個字符串,但由於空格用作分隔符而字符Iron - Alpha沒有用引號括起來,所以它們使得3個字符串,而不是1個。

接下來,textscan將如果您在格式規範中提供輸入行的完整說明,則只按照您的意願表現自己。例如,以下

M = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %s %s %s') 

對我來說工作得很好。由於您只需要前5列數據,並且可以讀取所有數據,因此可以輕鬆刪除不需要的列。

如果你想要或者需要避免讀取不需要的數據,你將不得不變得更聰明一些。您可以指示textscan忽略具體領域是這樣的:

M = textscan(fid, '%f %f %f %f %f %*f %*f %*f %*f %*f %*s %*s %*s') 

其內容只能在每一行的第5場。這些文檔將指導您如何進一步完善您的閱讀程序。

+0

還沒有結果?錯誤使用==> dlmread at 145 文件和格式字符串不匹配。 從文件(第1行,第30行)讀取數字時出錯==>鐵 錯誤==> gnd11 at 1 fid = dlmread('test.txt',''); – metal

+0

WTF ??我的回答沒有提及'dlmread'。 –

+0

fid = dlmread('test.txt'); A = textscan(fid,'%f%f%f%f%f%* f%* f%* f%* f%* f%* s%* s%* s'); x = A {1}; y = A {2}; z = A {3}; e = A {4}; f = A {5}; – metal

2

請嘗試dlmread。

data = dlmread('file.txt'); 

並檢查分隔符是否爲空格。它可能包含不可見字符'\ t'。

+0

???錯誤使用==> dlmread at 145 文件和格式字符串不匹配。 錯誤==> abc at 1 fid = dlmread('test2.txt','\ t'); – metal

+0

您的輸入文件中存在不規則的證據。在嘗試導入文件之前,可以通過修復這些不規則性來取得進展。 –

+0

是不是有其他方法?由於我的數據集是自動生成的,通常有大約50萬行。所以我幾乎不可能改變它們 – metal