2012-12-29 78 views
1

我有一個文本文件,看起來像這樣,我分裂在每個'|'。 在第三個'|'之間是兩個詞,我需要分成兩個單獨的列。在拆分時遇到困難。將值拆分爲兩個LINQ

Nbr| Address| Name |Phone|City|State|Zip 
455 |gsgdgsg |fir last|434 |jk |jh |0393 

我有這樣的東西,正在做分割和寫輸出到列表。目前我可以做拆分,並選擇第一部分罰款,但是當我做拆分,並選擇第二部分我索引超出數組錯誤的界限。

var Names = File 
      .ReadAllLines(path) 
      .Select(a => a.Split(new[] { '|' }, StringSplitOptions.None)) 
      .Select(a => new { 
       phoneNbr = a[0].Trim(), 
       Name = a[2].Trim().Split(' ')[0], 
       Name2 = a[2].Trim().Split(' ')[1], //gives me error I think becuase it already split it 
       addr = a[1].Trim() 
      }) 
       .ToList(); 
+0

內部值是否有'|'?領域長度是否固定? – Oded

+0

沒有這些'|'只將字段分開。 AND的長度不是固定值,這就是爲什麼我必須分割空白 – Jt2ouan

回答

2

您可能沒有第三列中的兩個詞,其索引2與某些記錄。在使用第二個元素之前,你需要使用兩個元素進行分解。

變化

Name2 = a[2].Trim().Split(' ')[1] 

Name2 = a[2].Trim().Split(' ').Length > 1 ? a[2].Trim().Split(' ')[1] : "" 
+0

哦,我忘了所有關於該文件標題沒有空格。但是如果它不感謝,你的代碼會處理它! – Jt2ouan

2

不是滾動您自己的結構化文本文件解析器,使用圖書館。

Microsoft.VisualBasic.FileIO命名空間包含TextFileParser類,或者您可以使用第三方庫,如受歡迎的FileHelpers

這樣的庫處理許多細微的問題,可以在處理解析這些文件時出現。

0

嘗試以下語法

var Names = (from s in File.ReadAllLines(path).Select(a => a.Split(new[] { '|' }, StringSplitOptions.None)) 
     let namestr=s[2].Trim().Split(' ') 
     select new { 
      phoneNbr = s[0].Trim(), 
      Name = namestr.Length >=1 ? namestr[0] :"", 
      Name2 = namestr.Length >=2 ? namestr[1] :"", 
      addr = s[1].Trim() 
     }).ToList(); 

它拆分名只有一次,也檢查空值。