2017-10-05 93 views
0

我目前正在編寫一個C#程序,解析SQL Server查詢報告中的數據,然後將其保存供以後使用。到目前爲止,我已經解析查詢已經非常簡單,但我剛剛收到包含此項測試文件:使用Bizarrely格式化條目解析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#中工作,並且我的正則表達式技能非常生鏽。

一些額外的信息:

  • 我沒有對數據庫的訪問,所以我不能改變格式。
  • 我不知道查詢結果是否可以包含多個這樣的條目。因此,我希望解析器能夠處理多個這些條目(如果存在)。
  • 此條目(IES)將包含其他表的查詢,這是令人欣慰的所有格式,像這樣的查詢報告的一部分:

    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]*