2012-03-11 5 views
0

다른 구조의 많은 텍스트 데이터가 있습니다. 일부 텍스트 기반 규칙에 따라이 텍스트의 일부를 추출해야합니다. 나는 정규 표현식을 사용할 것이지만 불행히도 응용 프로그램을 사용하는 사람들은 그것을 들어 보지 못했습니다.일반 규칙을 사용하여 텍스트 파일에서 콘텐츠 추출

기본적으로 응용 프로그램은 다음과 같은 것을 않습니다 텍스트 상자

  • 유형 또 다른 텍스트 상자
  • 에 단순한 규칙으로 출력의 구조로 데이터를에서 결과를

    1. 로드 받기 3 텍스트 상자 데이터 구조의

    예 (I이 메가 바이트의 데이터를 가지고) :

    Label1: value1, measurement 
    Label2; value2; something else 
    Nr, value3 (comment) 
    ... 
    

    정규 표현식 대신 사용할 수있는 다른 접근법이 필요합니다. 모든 행에서 하나의 값만 필요하기 때문에 매우 간단 할 수 있습니다.

    "value1, value2, value3" 
    

    정규식 할 수있는 간단한 대안은 있는가 : 나는 다음과 같은 구조를 얻을 수 있습니다 위의 예에서

    ? 누군가 이미 이와 비슷한 것을 구현 했습니까?

    나는 또한 간단한 사용자가 데이터 추출 규칙을 작성하도록 강요하는 것처럼 잘못된 각도에서 문제에 접근하고 있다고 상상할 수도 있습니다. 이 경우 질문은 "매우 간단한 사용자가 별도의 텍스트에서 데이터를 추출 할 수있게하는 응용 프로그램을 어떻게 만들 수 있습니까?"와 같이 좀 더 일반적인 것으로 변형됩니다.

    편집 : I가 그들을 위해 구현 가능한 일치로 다음과 같은 간단한 :

    파일 내용 :

    "Strain at break Ax2";"Unknown" 
    "Strain at break Ax1";"Unknown" 
    "Strain at break";"Unknown" 
    "Yield point strain";"Unknown" 
    "Uniform elongation";25.4087;"%" 
    "Tensile strength";261.323;"MPa" 
    "End test phase Yield point";1;"%" 
    "Maximum tensile force";5.22647;"kN" 
    

    패턴 :

    "Tensile strength";(?<value>[^;\n]*); 
    "Maximum tensile force";(?<value>[^;\n]*); 
    
    여전히

    너무 복잡합니다.

    "Tensile strength", [First value after] 
    

    모든 파일이 하나의 다른 보이기 때문에 내가 추출의 모든 일반적인 특성을 풀어 : 나는 예를 들어 얻기 위해 다른 문자열로 추악한 부품을 교체 시작하면 문제는.

  • +0

    LEX를 보셨습니까? – GETah

    +0

    _ "정규식을 사용 하겠지만 불행히도 응용 프로그램을 사용하는 사람들은 들어 본 적이 없습니다"_. 사용자 개발자 또는 당신입니까 ?? –

    +0

    사용자는 유압식 프레스로 작업하는 연구 조교이며 프로그래밍에 대한 교육은 전혀하지 않습니다. – Germstorm

    답변

    0

    정규식으로 규칙을 정의하여 문제를 해결했습니다. 규칙을 정의한 후에는 사용자가 쉽게 읽을 수있는 래퍼 규칙 집합을 정의했습니다.

    Ex.선

    Maximum amount of Sheet Drawing Force= 35.659695[kN] 
    

    에서 값을 추출하기 위해 나는 다음 사용자가 필드의 이름을 정의 할 정규 표현식을

    {0}=\s*(?<value>[^[\n\r]*) 
    

    을 정의했다. {0} 자리 표시자는 필드 이름으로 바뀌고 정규 표현식이 적용되었습니다.

    1

    FileHelpers 라이브러리를 살펴보십시오. 그것은 runtime generation of file layouts을 허용하고 귀하의 예를 돕는 것이 DelimitedClassBuilder이라고 생각합니다.

    아마도 저는 FileHelpers를 사용하여 레코드 정의를 DelimitedClassBuilder으로 구문 분석 한 다음 결과를 사용하여 레코드를 구문 분석합니다.

    관련 문제