2012-06-07 2 views
2

저는 maily가 PHP의 fgetcsv() 기능을 사용하는 CSV 처리 클래스에서 작업하고 있습니다.CSV 셀 인클로저 찾기

CSV 파일의 구분 기호와 인클로저 문자를 감지하고 싶습니다.

## *CSV File* ## 
,,,foo,bar,,cats are 
dead,lorem ipsum,csv,"this cell's enclosure is set",, 

어쨌든 나는 좋은 알아낼 수 없습니다 :

지금 난 그냥 파일의 일부 도대체 구문 분석 할 수있어 것을 알고, 셀 인클로저를 찾는 방법을 알아 내려고 노력하고있어 알고리즘은, 지금 난 단지 결과가 유효한 경우

답변

3

당신은 확인 후 알려진 모든 조합을 시도 할 수 있습니다 ... 모든 bruteforcing의 (다른 인클로저를 사용하여 파일을 읽고 출력을 확인) 생각 :

  • 모든 라인의 값은 같습니다.

인클로저가없는 경우 가능하면 엔클로저가 필요하지 않습니다.

+0

필자의 경우 필자는 천 라인 이상으로 갈 수있는 데이터베이스에서 자동으로 생성 된 CSV 파일을 읽어야하므로 무차별 한 힘이 매우 느립니다. –

+0

그럼 시작할 수 있고 X 열에서 불일치하는 문제가 발생하면 다시 시작합니다. 우선 "엔클로저 없음"으로 시작한 다음 두 번째로 많이 사용하는 조합을 선호합니다. 엔클로저가 아닌 불일치로 다시 시작하지 않아도되지만 첫 번째 불일치 일 때 대안을 반복하기 시작할 수도 있습니다. – hakre

+0

@ Jean-MarieComets [this] (http://codepad.viper-7.com/vLXDVn)와 같은 것을 사용하여 프로세스의 속도를 높이는 데 도움이 될 수 있습니다. 하나를 찾으십시오 (예 : 인클로저가 유효하지 않은 라인을 생성하지 않은 경우). 그것이 완벽한 것은 아니며 그것이 잘못 될 수있는 뚜렷한 경우가있을 것이라고 확신합니다. 그러나 가능한 후보자의 배열과 발생 횟수를 얻을 수 있습니다. 그것은 엔클로저가'\ r' 또는'\ n'이 아닌 펄 단어 문자가 아니라고 가정합니다 - 이것은 엔클로저가'[^ a-zA-Z_ \ r \ n]'과 일치해야하며 구분 기호가 될 수 없다는 것을 의미합니다. – DaveRandom