2013-08-31 5 views
-1

현재 각 파일 당 약 45,000 개의 레코드가있는 5 개의 CSV 파일이 있습니다. 이것에 대해 가장 좋은 방법은 무엇일까요? 필자는 이전에 I/O를 했었지만이 규모에서는 결코하지 않았습니다. 벡터 문자열을 파싱 하시겠습니까?큰 CSV 파일을 읽는 효과적인 방법은 무엇입니까?

+0

귀하의 제약 조건은 무엇입니까? 충분한 기억이 있습니까? 얼마나 충분한 지 모른다면 얼마나 될까요? –

+0

CSV 파일을 읽는 것은이 사이트에서 여러 번 전에 논의되었습니다. 이 방법들을 보았습니까? 만약 그렇다면 무엇이 잘못 되었습니까? – Borgleader

+1

무엇을 시도 했습니까? 너무 느린가요? 45,000 개의 레코드는 특별한주의가 필요한 대용량 데이터 세트처럼 들리지 않습니다. –

답변

1

예,이를 읽을 수 있으려면 vector이 적합 할 것입니다.

저장 용량 선택은 수행하려는 계획과 데이터가 무엇인지에 따라 다릅니다. 데이터 형식이 무엇인지 알고있는 경우 struct을 만들고 더 체계적인 형식으로 데이터를 읽을 수 있습니다. 예 : 파일이 다음과 같은 경우 :

name, score, err 

Mats, 89, 2.1% 
Steve, 79, 8% 

는이 같은 구조 할 수 :

struct Row 
{ 
    string name; 
    int score; 
    float err; 
} 

댓글이 45K 라인이 매우 아닌, 말하는 것처럼하고는 모든 주요 문제가 발생하지 않아야 당신이 손목 시계의 계산 능력으로 무언가에 그것을 달리기 않는 한.

+0

CSV 파일에는 약 10 개의 열이 있습니다. 각 요소에 대해 줄 단위로 읽거나 열을 다른 벡터로 나누어야합니까? – Rob

+0

아마도 좋은 계획 일 것입니다. 나는 네가 그렇게 쉽게 할 수 있기를 기대한다. –

+0

좋은 계획, 각 행 자체 벡터 또는 각 열 자체 벡터? – Rob

1

그냥 당신이하고있는 일을 계속하십시오 Vectorstring의의에 모든 라인하는 Vectorstring의 s의 Vector, 또는 객체의 Vector를 참조하십시오. 우리는 200 ~ 500MB RAM을 사용하고 있으며 요즘 대부분의 컴퓨터는 사용 가능한 것보다 훨씬 많은 것을 가지고 있습니다. 처리 시간 관점에서 볼 때 평균 컴퓨터에서 5 ~ 10 분이 걸릴 것입니다 (물론 처리량에 따라 다름).

문제가 발생하면 새로운 질문을하여 추가 정보를 얻으십시오.

+2

응? 45K 레코드는 200-500MB를 차지합니까? 행당 2-11KB입니다. 오히려 많이 들립니다. 그리고 그것을 처리하는 행 당 13ms? –

+0

방금 ​​48K 레코드가있는 데이터베이스 테이블을 가져 와서 CSV로 내 보낸 다음 필드 중 하나가 "알림"(기본적으로 웹 사이트의 클라이언트에게 보낼 전자 메일의 텍스트)이고 총 10 필드 중. 파일은 216MB입니다. –

+0

해킹 한 간단한 프로그램으로 그 파일을 읽는 데는 0.4 초가 걸립니다. –

관련 문제