2012-10-29 2 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

세 가지 문제 : CSV NOT 제공된다

1) 샘플 데이터. csv는 쉼표로 구분 된 변수를 나타냅니다. 샘플 데이터는 탭이나 공백으로 구분됩니다. 업데이트 : 데이터가 csv가되도록 샘플을 편집했음을 알았습니다. 그에 따라 내 솔루션을 편집했습니다.

2) 행 및 열 입력 인수를 csvread으로 사용하려면 "excel"유형 문자열이 아닌 0부터 시작하는 정수 값의 행 및 열 인수로 입력해야합니다.

3) 제공 한 샘플에서 첫 번째 열에 날짜를 얻으려는 것으로 나타납니다. 이것은 csvread 또는 dlmread을 사용하려는 경우이 두 함수가 숫자 데이터 만 처리 할 수 ​​있으므로 문제입니다 (10/24/2011은 문자열 임).

그래서 저는 여러분이 우리에게 보여 주신 내용이 파일을 대표한다고 가정하겠습니다. 이것을 감안할 때, 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을 사용하는 동안 오류가 발생했습니다. = 0> Q3 at 7 FinalData = [datenum (데이터 {1}, 'mm/dd/yyyy'), 데이터 {2}, 데이터 {3}, 데이터 {4}, 데이터 {5} 데이터 {6}, 데이터 {7}]; 발생 원인 : ==> dtstr2dtnummx를 사용하는 중 오류 날짜 문자열을 날짜 번호로 변환하지 못했습니다. ' – gianteagle

+0

@gianteagle 사과 - 문제가 해결되었습니다. 나는 머리말 선을 잊었다. 그건 그렇고, 당신이 샘플 위에있는 "데이터"는 CSV 파일에 실제로 없다는 것입니다 (삭제 한 경우)? 또한, 나는 그저 조금 더 작게 만들었습니다. –

+0

입력 해 주셔서 감사합니다. 하나의 마지막 문제. 날짜 열은 734800로 인쇄됩니다. – gianteagle

0

13b에이 데이터에 액세스하기 위해 MATLAB 테이블을 활용할 수 있습니다 : 나는 변수 이름이 유효한 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 

참고. 이것은 "Adj Close"사이의 공간 때문이었습니다.