2010-02-17 3 views
0

아래 형식으로 된 CSV 파일이 있습니다. 버크 CSV 데이터 중 하나라도 프로그램에서 읽으면 문제가 발생합니다.Java 분할 명령 CSV 파일 구문 분석에 대해

"D", abc "def", "0429"292 "0", "11", "IJ80", "Feb10_1 이 .txt-2 ","FILE 기록 ","05/02/2010 ","2010년 4월 3일 "," ","1 ","- 91 "," "," "


"D", "abc"def ","04292920 ","11 ","IJ80 ","Feb10_1.txt-2 ","FILE RECORD ","05/02/2010 ","04/아래의 split 명령은 큰 따옴표 안의 쉼표를 무시하는 데 사용됩니다. 이전 게시물에서 아래의 split 명령을 받았습니다. . 내가이 명령을했다

문자열 항목을 [] = line.split (URL을 붙여 "(? = ([^ \"] \ "[^ \"] \ ") [^ \"] $) "을 15) 에서 System.out.println ("items.length "+ items.length) 상기 items.length 14 대신 15 ABC로 인쇄

Regarding Java Split Command Parsing Csv File

" def가 개별 필드로 인식되지 않고 항목 [0]에서 "D", abc "def로 잘못 저장됩니다. 아래의 방법으로 저장하려고합니다.

항목 [0] "D"이어야하며, 항목 [1]이어야 ABC "DEF

값이있을 때 동일한 문제가 발생", "DEF"ABC. 나는

로 저장할

항목 [0] "D"및 항목 [1] "ABC"DEF "

는 또한이 분할 명령은 큰 따옴표는 이중 내부 반복하면 완벽하게 작동해야해야 따옴표 (필드 값이 D 데프 "ABC는" "", 1).

내가이 문제를 해결할 수있는 방법.

+1

다음은 유효한 CSV 회선입니다. 견적은 탈출해야합니다. 간단한 파서를 작성하고 정규식을 포기할 것을 제안합니다. –

+0

이전 주제에서 대답했습니다 : ** 정규 표현식을 사용하여 CSV를 구문 분석하지 마십시오. 이것은 문제를 요구하고 있습니다. ** 그것은 시간 낭비입니다. 내 대답을 참조하십시오 : http://stackoverflow.com/questions/2241915/regarding-java-string-manipulation/2241950#2241950 오, 제발 하나 * 사용자 계정을 여기에 충실하십시오. – BalusC

답변

0

가능하다면, 당신의 CSV 형식을 변경하는 것은 매우 간단한 솔루션을 만들 것입니다.

분리. 자 분리 값, 공통점에 대한 개요는 다음을 참조하십시오 유닉스 기반 시스템에서 형식 :

http://www.faqs.org/docs/artu/ch05s02.html#id2901882

+0

고마워. 각 필드를 큰 따옴표로 묶어야하는 파일 형식을 수정해야합니다. 필수 항목 : "A", "Field1", "Field2", "Field3", "Fi"el, d ","Fi "" (double quote and comma) 두 개의 구분 기호를 포함하도록 아래의 분할 명령을 어떻게 변경합니까? (큰 따옴표와 쉼표)를 모두 함께 사용 하시겠습니까? line.split (" ,? = ([^ \ "] * \"[^ \ "] * \") * [^ \ "] * $)", 15); – Arav

4

나는 당신이 CSV 파일을 구문 분석보다는 정규 표현식을 사용하려고하는 파서를 작성하는 것이 더 나은 것 같아요. 일단 라인 내에서 캐리지 리턴으로 CSV 파일을 다루기 시작하면 정규 표현식이 떨어져 나갈 것입니다. 모든 문자를 통과하고 데이터를 분리하는 간단한 while 루프를 작성하는 데 많은 코드가 필요하지 않습니다. Regex가 아닌 파서가있는 경우 "비표준"* CSV 파일을 다루는 것이 훨씬 쉽습니다.

* 저는 CSV에 대한 공식적인 표준이 없기 때문에 비표준이라고 말합니다. 그리고 여러 시스템의 CSV 파일을 다루는 경우 abc "def 필드와 같은 이상한 것들이 많이 보입니다. 위의 그림과 같이 연결합니다.

+0

고마워. 각 필드를 큰 따옴표로 묶어야하는 파일 형식을 수정해야합니다. 필수 항목 : "A", "Field1", "Field2", "Field3", "Fi"el, d ","Fi "" (double quote and comma) 두 개의 구분 기호를 포함하도록 아래의 분할 명령을 어떻게 변경합니까? (큰 따옴표와 쉼표)를 모두 함께 사용 하시겠습니까? line.split (" ,? = ([^ \ "] * \"[^ \ "] * \") * [^ \ "] * $)", 15); – Arav

3

opencsv 자바에 대한 좋은 간단하고 경량 CSV 파서입니다. 그것은 쉽게 데이터를 처리합니다.

0

Opencsv은 CSV 구문 분석에 가장 API. 이것은 리눅스 SED 명령으로 수행 할 수 있습니다 매우 간단하고 Java에서 사전 처리.File이 적절한 형식이 아닌 경우에는 파이프 또는 다른 고유 분리 문자로 ","로 분리 된 적절한 구분 기호로 변환하십시오. 따라서 Opencsv에서 쉽게 필드 값과 열 구분 기호를 구분할 수 있습니다. Java 코드로 Linux의 힘을 사용하십시오 .

관련 문제