2017-10-05 1 views
0

현재 SQL Server 쿼리 보고서를 구문 분석하여 나중에 사용하기 위해 저장하는 데이터를 파싱하는 C# 프로그램을 작성 중입니다. 지금까지 내가 분석했던 쿼리가 매우 간단하고,하지만 난 그냥이 항목이 포함 된 테스트 파일 접수 : 기괴한 형식의 항목으로 SQL 쿼리 보고서 구문 분석

Client Contact                                                             Client Email 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
Primary: Nelli Quiroga 

, [email protected] 
Secondary: Zully Aranda, [email protected] 
                                       [email protected]|[email protected] 

이 (서식을 용서하세요 - 그건 정확히 어떻게 쿼리 출력한다.)

주 클라이언트와 보조 클라이언트의 이름과 전자 메일 주소를 모두 가져올 수 있어야합니다.이 주소는 List<Tuple<string, string>>에 저장됩니다. 지금까지, 나는 그것을 효율적으로하는 해결책을 고안하지 못했습니다. 내 최고의 추측은 어떻게 든 Regex를 사용해야 할 것이지만 Regex가 C#에서 어떻게 작동하는지 익숙하지 않고 정규식 기술이 매우 녹슬어 보인다.

몇 가지 추가 정보 :

  • 나는 데이터베이스에 액세스 할 수없는, 그래서 서식을 변경할 수 없습니다.
  • 쿼리 결과에 둘 이상의 항목이 포함될 수 있는지 여부는 알 수 없습니다. 이 때문에 파서가이 항목 중 하나 이상을 처리하도록합니다. 모든 모든 입력을 감상 할 수있다

    User_Name           Group_Name 
    -------------------------------------------------- -------------------------------------------------- 
    msteffl           NULL 
    spurcell           Admin 
    wgervais           Admin 
    djames            Admin 
    loaduser           Admin 
    mbreu            Admin 
    wgervais           ComplianceContractors 
    wgervais           ComplianceOfficers 
    sgregory           ComplianceOfficers 
    ntabares           ComplianceOfficers 
    lduffaut           ComplianceOfficers 
    pdeneree           ComplianceOfficers 
    serickson           ComplianceOfficers 
    mbreu            ComplianceOfficers 
    jreinhardt           ComplianceOfficers 
    jromoser           ComplianceOfficers 
    ebell            ComplianceOfficers 
    bkeogh            ComplianceOfficers 
    cbarnett           ComplianceOfficers 
    cbarnett           Users 
    bkeogh            Users 
    ebell            Users 
    djames            Users 
    jromoser           Users 
    jreinhardt           Users 
    mbreu            Users 
    serickson           Users 
    pdeneree           Users 
    lduffaut           Users 
    ntabares           Users 
    sgregory           Users 
    spurcell           Users 
    wgervais           Users 
    

:

  • 이 항목 (들)은 다행히도 모든과 같이 형식이 다른 테이블에 쿼리를 포함하는 쿼리 보고서의 일부가 될 것입니다.

  • +0

    Management Studio에서 "파일 출력"을 확인하거나'sqlcmd'를 호출 할 때 나타나는 "보고서"와 비슷합니다. 이 경우 더 나은 형식화 된 출력을 얻기 위해 쿼리를 수정할 필요가 없으며 출력을 처리하는 더 좋은 방법입니다. "액세스 권한 없음"이라고 말하면서 소스로 돌아가서 Management Studio에서 모눈 결과를 복사하여 붙여 넣기를 시도해보고 Excel에 붙여 넣을 수 있는지 물어보십시오. 여분의 기술적 정교함. –

    +0

    강조 :이 형식은 기계에 의한 일관된 구문 분석이 가능하도록 설계되지 않았습니다 *. 당신이 고안 한 모든 구문 분석은 데이터에서 개행 문자를 창의적으로 적용함으로써 손상 될 수 있습니다.이 형식은 탈출을 시도하지 않습니다. 이 *가 Management Studio에서 출력되는 경우 데이터가 충분할 경우 데이터를 자릅니다. 효과적으로 열을 행에서 분리하는 것은 불가능합니다. 추측의 종류에 따라 처리가 불안정 해 지므로 쓸모가 없습니다. –

    +0

    예, 출력 파일입니다. 내가 생각할 수있는 다른 파일에 데이터를 붙여 넣으라는 질문에 가장 큰 문제는 그것이 바람직 할 지 모른다는 것입니다. 쿼리 결과를 스프레드 시트에 복사하여 붙여 넣는 추가 단계는 너무 지루하고 비효율적 인 것으로 간주 될 수 있지만 관계없이 여전히 질문 할 수 있습니다. 가능하다면, 나는 (그리고 그들도) 이것을 알아내는 것에 감사 할 것이다. – MrM21632

    답변

    0

    좋아, 일부 시행 착오 끝에 나는 주어진 연락처 출력과 잘 작동하는 정규 표현식을 작성할 수있었습니다. 으로 출력 할 수있는 파일은입니다.하지만 지금은해야 할 일이 있습니다.

    이 문제의 정규 표현식이다 :

    (?:Primary|Secondary):[ ]*[\r\n]*[a-zA-Z ]+[\r\n]*[ ]*,[ ]*[\r\n]*[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-z]+[ ]*[\r\n]*

    은 두 부분으로 항목을 중단 할 수 있습니다, 다음 날 트림 및 각 접촉을 분할 할 수 있도록 기본 및 보조 접촉, 필요합니다.

    다시 말하지만, 주어진 입력과 함께 작동한다고 확신 할 수는 없지만, 나는 또한 합리적으로 절대적으로 만들 수 있다고 생각합니다. 따라서 모든 인스턴스는 [ ]*[\r\n]*입니다.