2012-10-29 96 views
2

我有下面的示例數據錯誤讀取從CSV文件數據時到MATLAB

Date,Open,High,Low,Close,Volume,Adj Close 
10/24/2011,181.51,183.39,180.62,182.25,5890600,182.25 
10/21/2011,179.11,181.67,178.75,181.63,8054200,181.63 
10/20/2011,178.13,179.24,176.17,177.25,7513800,177.25 

我從一個CSV文件導入MATLAB中讀取數據。

data = csvread('filename.csv','A1:G12542'); 

我收到以下錯誤。任何想法如何繞過這個問題?

??? Error using ==> dlmread at 145 
Header lines must be integer-valued. 

Error in ==> csvread at 50 
    m=dlmread(filename, ',', r, c); 

Error in ==> Q11 at 1 
data1 = csvread('ibm.csv','A1:G12542'); 
+0

您顯示的小表顯然不代表CSV。顯示輸入文件的示例,前幾行應該足夠了。 –

+0

我編輯了我的原始文章以顯示樣本輸入 – gianteagle

+0

如果包含單詞「DATA」的行是該文件的一部分,請將其除去,「csvread」只能讀取數字。如果不是這樣,擺脫它,這是誤導人們試圖幫助你。 –

回答

1

三個問題:

1)提供非CSV的樣品數據。 csv代表逗號分隔變量。您的示例數據似乎被選項卡或空白分隔。 更新:我看到你已經編輯你的示例,使數據現在是csv。我相應地編輯了我的解決方案。 2)如果你想使用csvread的行和列輸入參數,它們應該被輸入爲基於零的整數值的行和列參數,而不是「excel」類型的字符串。

3)從您提供的樣本中看來,您希望獲取第一列中的日期。如果您想使用csvreaddlmread,這是個問題,因爲這兩個函數都只能處理數字數據(請注意,2011年10月24日是一個字符串)。

因此,我將假設您向我們展示的是您文件的代表。鑑於此,將其導入matlab的方式如下:

fid1 = fopen('YourFilePathHere', 'r'); 
D = textscan(fid1, '%s%f%f%f%f%f%f', 'Delimiter', ',', 'HeaderLines', 1); 
fclose(fid1) 
D = [datenum(D{1}, 'mm/dd/yyyy'), D{2}, D{3}, D{4}, D{5}, D{6}, D{7}]; 

在第一行中,我打開文件以供閱讀。在第二行我掃描數據。請注意,格式字符串'%s%f%f%f%f%f%f'。這表示第一列是字符串格式%s,接下來的6列是浮點數(我們可以將其改爲其他數值類型,但浮點數目前最簡單)。在第三行中,我關閉了文件。在最後一行中,我將日期字符串轉換爲matlab數字日期格式,然後將其與其餘數據合併爲一個數字矩陣,以供分析。

+0

**我收到以下錯誤** '???錯誤使用==> datenum在178 DATENUM失敗。在數據{3},數據{4},數據{5},數據{2} Data {6}, Data {7}]; 造成者: 錯誤使用==> dtstr2dtnummx 將日期字符串轉換爲日期編號失敗。' – gianteagle

+0

@gianteagle道歉 - 它是固定的。我忘了標題行。順便說一下,你在樣本上方得到的「DATA」實際上並不在csv文件中(是​​的,刪除它)?此外,我只是讓它更緊湊一點。 –

+0

感謝您的輸入。最後一個問題。日期列被打印爲734800 – gianteagle

0

13B中,你可以充分利用MATLAB表訪問此數據:

data = readtable('filename.csv'); 
data = 

    Date   Open  High  Low  Close  Volume  AdjClose 
____________ ______ ______ ______ ______ __________ ________ 

'10/24/2011' 181.51 183.39 180.62 182.25 5.8906e+06 182.25 
'10/21/2011' 179.11 181.67 178.75 181.63 8.0542e+06 181.63 
'10/20/2011' 178.13 179.24 176.17 177.25 7.5138e+06 177.25 

注有我省略了一個事實,即變量名進行了修改,是一個有效的MATLAB標識符的警告。這是因爲「調整關閉」之間的空間。