Regex를 사용하여 파일을 해석해야 합니까, 아니면 더 나은 방법이 있습니까?
해석해야 할 2000행 이상의 파일이 있습니다.100% 정확한 결과를 얻을 수 있는지 확인하고 싶습니다.이 결과는 MariaDB로 Import됩니다.
파일은 다음과 같습니다.
line 0: #start#
line 1: 20111211\200000
line 2: n=john|l=smith,131_stree_apt#102_city_state_11111_country,19989989988|17771112222,user%64domain.com,12,21,551|626|23\r
...
line 2156: #end#
즉, line 1은 24h 형식의 날짜 시각이고 line 2는 line 형식입니다.
- n = 이름
- l = 성
- 풀 어드레스
- 전화기+휴대전화
- 이메일
- 총목표
- 총 패스
- 얼음 위의 시간+벤치에서의 시간
- 음경분
나는 정규 표현을 이해할 수 없다.다른 아이디어는 각 행을 해석하고 각 쉼표, 각 파이프 등을 해석하는 것입니다만, 이 접근방식은 regex보다 느리고 정확도가 낮다고 생각합니다.내 말이 맞니?
정규 표현을 알 수 없기 때문에 각 행을 해석하고 각 쉼표를 해석한 다음 각 파이프를 해석하는 것이 제 아이디어였습니다.이것은 regexp보다 더 느리고 정확하지 않다고 생각합니다.
가서 한 번 해보는 게 어때요?이게 암시하게 하지 말고 과감하게 행동하세요.일반적으로 내가 너라면 다음을 할 것이다.
- 간단한 구현
- 시험해 보다
- 튜닝
최대 2000개의 레코드는 많지 않기 때문에 세 번째 단계는 필요하지 않을 수 있습니다(특히 이 마이그레이션이 한 번만 실행되는 경우에는 2분이면 어떻게 됩니까?).
BTW: 이것은 일반적인 프로그래밍 조언으로 많은 문제에 적용됩니다.섣불리 최적화하지 마십시오.
파서를 작성하면 정규 표현보다 더 강력하고 쓰기 쉽고 추론하기 쉽습니다.
파일 문자를 한 글자씩 읽고, 각 문자에 대해 파일을 사용하여 수행할 작업을 결정합니다.
처음에는 '날짜'를 읽다가 새 줄을 찾으면 날짜 구문 분석이 완료되었음을 알 수 있습니다.
그런 다음 각 레코드를 분석합니다., 「 」 「 」 「 」 「 」를 볼 수 있습니다.n
' , 으면 안 될 것 같다'가 나올 때까지 계속 읽게 됩니다|
될 l
글을 ,
etc.치 못한 알 수 . 예상치 못한 것을 발견한 경우 파서에 오류가 있거나 데이터 파일에 오류가 있습니다.
파일을 완벽하게 읽으면 알 수 없습니다. 100%는 없습니다.'충분히 좋은' 것 밖에 없다.이것은 컴퓨터 과학의 일반법이다.
물론 완전한 코데즈를 알려드리진 않겠지만그러나 플레이스 홀더의 답변으로 기본적인 접근방식을 제시합니다.
preg_match('/
^
n=(\w+) # just alphanumerics
\|
l=(\w+)
,
([\w\h\#]+) # mixture of letters and space and #
,
([^,]*) # anything but commas
...
$
/x', $line, $match);
유사 CSV 행에 있는 필드 수만큼 문자 클래스 및 캡처 그룹만 있으면 됩니다. \d+
소수점만 일치시키는 것도 유용할 수 있습니다.
여기서 기본적인 문자열 함수를 사용하여 가짜 파서를 쓰는 것은 분명 적절하지 않습니다.정확한 코드와 신뢰성이 높은 regex를 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/8439699/should-i-use-regex-to-parse-my-file-or-is-there-a-better-way
'programing' 카테고리의 다른 글
MySQL은 다른 세션에 삽입된 행을 선택할 수 없습니다. (0) | 2022.10.20 |
---|---|
Student Data txt 파일 내의 데이터를 읽고 학생의 평균을 계산하려면 어떻게 해야 합니까?또한 구조물을 통해 스위치로 전송합니다. (0) | 2022.10.20 |
문자열에 PHPUnit에 다른 문자열이 포함되어 있는지 테스트하는 방법 (0) | 2022.10.20 |
로드밸런싱을 위한 올바른 MariaDB Galera jdbc URL 속성은 무엇입니까? (0) | 2022.10.20 |
mysql dump - 일부 테이블 데이터를 제외합니다. (0) | 2022.10.20 |