2014-01-14 3 views
0

5 개의 필드 (열)를 포함하는 하나의 CSV 파일이 있습니다. 5 열 중 2 번째와 4 번째 만 읽고 싶습니다.이 열은 추후 처리에 필요합니다. 지금은 opencsv api의 readAll() 메소드를 사용하여 읽고 있습니다. 이 방법을 사용하여 두 번째 및 네 번째 열 값을 가져 오기 위해 모든 열을 처리해야합니다.CSV 파일에서 특정 열을 읽는 방법은 무엇입니까?

필수 열의 값을 읽을 수있는 방법이 있습니까? 즉, CSV 파일에서 두 번째 및 네 번째 값을 읽으십니까?

올바른 접근 방법인가요? 아니면 다른 방법을 사용해야합니까?

+0

당신이 필드를 폐기하는 문제가 모두 5 개 필드를 읽을 수있는 경우에도 당신 필요 없어? – PeterMmm

+0

@PeterMmm 헤더 이름으로 csv 파일을 읽을 수있는 다른 방법이 있는지 알고 싶습니다. 헤더를 지정하면 해당 헤더 아래의 데이터 만 읽어야합니다. – Vishwas

+0

내가 생각할 수있는 유일한 합리적인 방법은 구조화 된 (csv-) 파일이 필요합니다. 나는. 파일의 각 필드는 고정 된 크기로 알려져 있습니다. 임의의 길이의 필드가 있으면 가능성에 따라 추측 된 검색을 시작할 수 있습니다. 구현을 즐기십시오. 오히려 csv를 DBS로 가져 오기를 제안합니다. –

답변

0

성능이 사용자의 질문에서 보이는 것과 같은 문제 인 경우 사용자 고유의 파서를 구현하는 것이 좋습니다. opencsv는 이러한 기능을 제공하지 않습니다. 아마도 성능 우승이 그다지 크지 않기 때문일 것입니다.

0

나는 그렇게 생각하지 않는다.

어떤 색인에 색인이 있는지 확인하려면 csv-parser가 전체 줄 또는 최소한 마지막 줄까지 처리해야합니다 (귀하의 경우 네 번째 항목). 데이터의 길이가 고정되어 있더라도 부분 행의 경계를 알 수 있도록 전체 행을 읽어야합니다.

메모리 사용이 문제가되는 경우 CSVReader#readAll()을 사용하는 것이 최선의 방법이 아닙니다. 이 경우 대신 CSVReader#iterator()을 사용하고 반환 자 배열의 색인별로 열에 액세스하는 것이 좋습니다. myCsvRow[1]myCsvRow[3].

0

Commons CSV를 사용하면 csv 요소를 반복하고 열 레이블을 사용하여 특정 열을 읽을 수 있습니다.

참고 : (일반적인 CSV는 openCsv 및 다른 CSV 파서의 통합입니다.) 특정 열 당신이지도에 각 csvRecord을 변환하고 다음과 같이 값을 얻을 수 읽기에 대한

http://commons.apache.org/proper/commons-csv/ :

List<CSVRecord> aCSVList == aCSVParser.getRecords(); 
... 
for (CSVRecord aCSVRecord : aCSVList) 
{ 
    ... 
    Map<String, String> aCurrentMap = aCSVRecord.toMap(); 
    aCurrentMap.get("ColumnLabel"); 
} 
관련 문제