2017-09-24 3 views
2

CSVReader를 사용하여 Java에서 CSV 파일을 읽습니다. 그것은 "작업"입니다하지만이 같은 문자열의 배열로 라인을 분할 할 때 나는 사소한 문제를 발견했습니다 여기에Java - CSVReader는 정확하게 값 내에서 쉼표로 구분됩니다.

reader = new CSVReader(new FileReader(csvFile)); 
line = reader.readNext() 
String[] lineDetail = line[0].split(";", -1); 

나의 문제 : 제대로 작동 아래의 라인 :

[ABEL MESQUITA JR.;178957;1;2015;RR;DEM;55;1;MANUTENÇÃO DE ESCRITÓRIO DE APOIO À ATIVIDADE PARLAMENTAR;0;;WM PAPELARIA E ESCRITÓRIO;12132854000100;3592;0;2017-04-26 00:00:00;296;0;296;4;2017;0;;;1377952;5828;0;3074;6266962] 

하지만 문자열의 3 개 배열에 결과를 CSVReader를 사용하여 읽으려고 할 때 아래 라인 :

:

[ABEL MESQUITA JR.;178957;1;2015;RR;DEM;55;3;COMBUSTÍVEIS E LUBRIFICANTES.;1;Veículos Automotores;B.B. PETROLEO LTDA;03625917000170;4339;0;2017-01-31 00:00:00;4007, 06;0;4007, 06;1;2017;0;;;1354058;5711;0;3074;6196889] 

배열은 다음과 같이

ABEL MESQUITA JR.;178957;1;2015;RR;DEM;55;3;COMBUSTÍVEIS E LUBRIFICANTES.;1;Veículos Automotores;B.B. PETROLEO LTDA;03625917000170;4339;0;2017-01-31 00:00:00;4007 

06;0;4007 

06;1;2017;0;;;1354058;5711;0;3074;6196889 

나는 문제는이 값의 생각 : 4007, 첫 번째 줄의 값은 정수 06부터 296

사람이 CSVReader는 하나 개의 배열을 반환 할 대신 3하는 방법을 알고 있나요 ?

미리 감사드립니다.

EDIT 1

I 처음으로 연결된 두 번째 및 세 번째 배열해야 결과. 그래서 저는 분리 된 것이 아니라 4007,06을 함께 가질 것입니다.

+1

어디서'CSVReader'를 사용하고 있습니까? 당신이'String.split'을 사용하고있는 것처럼 보입니다. –

+0

나는 코드를 편집하고 추가 할 것이다. –

+0

@AndyTurner 내가 편집했습니다. 하지만 솔직히 말해서 문제는 분할 호출이라고 생각합니다. CSVReader가 제대로 라인을 반환하고 있습니다. –

답변

0

귀하의 CSV 데이터 라인이 기본 CSV 필드 구분 기호 인 쉼표로 분리됩니다.

쉼표로 분리하지 않으려면 CSV 파일을 읽기 전에 사용하지 않는 문자 (예 : Tab)를 CSV 필드 구분 기호로 사용하도록 CSV 판독기를 초기화하십시오. 이렇게하면 행당 하나의 필드가 생성됩니다. '당신이 ;에 CSV 필드 분리를 구성하지 왜

은 그래서 세미콜론으로 구분 된 필드에 직접 CSV를 분할하고 당신 원 :하지만 당신의 기대는 일반적으로 쉬운 방법이 있어야하기 때문에, 무의미한 것 같다 추가적인 분할 작업이 필요합니까? 이렇게하면 쉼표로 문제를 해결할 수도 있습니다.

Value 1; "Value;2" 

는 대신 3 개 값을 얻을 것이다 방법을 사용 : 2 개 값으로이 유효 CSV를 분할 할 수 없기 때문에 귀하의 line[0].split(";", -1)

는 기본적으로 버그입니다.

CSVReader에 대한 자세한 내용을 보려면 사용중인 정보를 패키지로 표시하여주십시오.

+0

예, 문제가 해결되었습니다! 고마워. –