문제

나는 거대한 설정의 로그인하고 필요 구문 분석하는 각 라인(그래서 효율 은 매우 중요합니다).

각 로그인이의 양식

cust_name time_start time_end IP(또는 URL)*

그래서 ip 주소,시간,시간과 비어 있을 수 있는 목록의 ip 주소 또는 url 을 세미콜론으로 구분됩니다.만 있는 경우에는 ip 또는 url 에서 마지막 목록이 없다 구분 기호입니다.이 있는 경우 은 1 개 이상의 다음,그들이 세미콜론으로 구분되어 있습니다.

나는 방법이 필요한 분석이 라인과 그것을 읽으로 데이터 구조입니다.time_start 나 time_end 할 수 있는 시스템이 시간 또는 GMT.cust_name 을 수도 있는 여러 문자열 공백으로 구분됩니다.

내가 이것을 할 수 있으로 읽는 문자에 의해 문자와 본질적으로 쓰는 나의 자신의 parser.더 좋은 방법이 있을까요?

도움이 되었습니까?

해결책

어쩌면 부스트 RegExp lib 당신을 도움이 될 것입니다.http://www.boost.org/doc/libs/1_38_0/libs/regex/doc/html/index.html

다른 팁

나는 성공을 토 향상 이 종류의 것입니다.그것은 당신이 휴식을 입력 스트림으로 토큰으로 사용자 지정 구분 토큰.

정규 표현식을 사용하여(boost::regex 좋은 구현을 위한 C++)당신은 쉽게 수 있는 별도의 다른 부분에 귀하의 문자열 cust_name, time_start ... 모든 것을 찾을 수 있 url\ips

두 번째 단계는 더 상세한 분석의하는 그룹이 필요합니다.날짜 예를 들어,당신은 당신할 수 있는 분석을 사용하여 boost::datetime 도서관(쓰는 사용자 정의 경우 파서 문자열 형식이 되지 않 기준).

당신은 왜 이런 일을 하고 싶 C++?그것은 소리와 같은 명백한 작업을 위해 무언가가 다음과 같 perl.

사용하십시오 정규 표현식 라이브러리...

사용자 입력을 요구 사용자 지정 parser.또,기도하는 이상적인 세계와 오류가 존재하지 않습니다.특히,하려는 경우 효율입니다.게시 코드가 도움이 될 수 있습니다.

이러한 간단한 문법을 사용할 수 있는 분할,살펴보 http://www.boost.org/doc/libs/1_38_0/doc/html/string_algo/usage.html#id4002194

업데이트 변경된 과감하게 대답!

나는 거대한 설정의 로그인하고 필요 구문 분석하는 각 라인(그래서 효율성은 매우 중요합니다).

는 C++에 많은 도움이되지 않습니다 효율성의 관점에서 이 상황입니다.속지 않는다는 생각으로 그냥 당신이 가지고 있기 때문에 빠른 분석 코드에서는 C++프로그램에서는 고성능!

효율성 당신이 정말로 필요하지 않 성능에서"컴퓨터 코드의 수준"코드에 구문 분석,하지만 전체적인 알고리즘의 수준입니다.

에 대해 생각하신다고자 노력하고 있습니다.
당신은 거대한 텍스트 파일로 변환할 각 라인은 데이터 구조,

저장하기 데이터 구조에 메모리가 매우 , 어떤 언어를 사용하!

무엇을 해야 할 일은"가"에서는 한 번에 한 줄로 변환하는 데이터 구조,처리하는것,그리고만 끝나면으로 데이터 구조는,당신은 가서 다음 줄로 변환하는 데이터 구조,처리,및 반복합니다.

만약 당신이 그렇게 한다면,당신은 이미 해결된 중요한 병목 현상이 발생합니다.

에 대한 구문 분석하는 라인의 텍스트,그것은 보인다는 형식의 데이터는 매우 단순한 체크 아웃 비슷한 질문을 물었는 동안 전: C++문자열 분석(python 스타일)

귀하의 경우에,나는 가정 사용할 수 있는 문자열 stream,사용 >> 연산자를 읽을 다음"일"다.

이 답변 예를 들어 코드입니다.

또는,(나는 원하지 않았을 삭제 이 부분!!) 를 작성할 수 있다면 이에서는 파이썬 것이 훨씬 더 간단합니다.난 당신의 상황(것 같다 붙어 있어는 C++)하지만 아직도

에서 보이 프레젠테이션을 하기를 위한 이러한 종류의 작업을 효율적으로 사용하는 파이썬 발전기를 표현: http://www.dabeaz.com/generators/Generators.pdf

그것은 동안 가치가 읽습니다.슬라이드 31 그는 것을 보이는 것이 무언가가 매우 유사하다 당신이 무엇을 행하려고 노력하는 것입니다.

그것은 적어도 당신은 아이디어를 얻으세요.
그것은 또한을 보여 줍니다 아주 강하게 성능을 얻지에 의하여 특정 문자열을 분석 코드,하지만 모두 알고리즘이 있습니다.

당신이 시도할 수 있었을 사용하여 간단한 lex/yacc|flex/bison 어휘를 분석해 이런 종류의 입력이 있습니다.

파서 당신은 필요한 소리가 정말 간단합니다. 가입니다. 어떤 언어를 컴파일할 수 있어야 분석에서 아주 높은 속도입니다.그 후의 문제는 어떤 데이터 구조를 구축 및 저장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top