2010-08-12 96 views
4

我處理CSV文件字符串分割ASP.NET/C#

ABC|06|001 
PPP|06|001 

我正在LINQ分裂CSV

var path = Server.MapPath("~/App_Data/CSV.txt"); 
var _collectCSGData = from line in File.ReadAllLines(path) 
         let parts = line.Split('|') 
         select new { ID = parts[0],Assignment=parts[1]}; 

如何獲得每個最後一個項目線?

(即)

001 
001 
+0

這看起來更像是管道分隔的文本,而不是CSV。 – 2010-08-12 17:47:19

+0

@Stephen Cleary - 如果按列分隔,那麼無論分隔符如何,人們都會稱其爲CSV,因爲它可以輕鬆導入到Excel中。 – 2010-08-12 17:51:22

回答

8
from line in File.ReadAllLines(path) 
select line.Split('|').LastOrDefault() 
+0

+1 - 好的,這看起來像一個很好的答案。我從來沒有使用過這個功能。 – 2010-08-12 17:48:44

+0

好的答案雅各布 – Gopi 2010-08-12 18:05:04

1

喜歡的東西:

parts[parts.length -1] 

應該做的伎倆。

+1

好吧,但如果長度爲0,這將會崩潰... – 2010-08-12 17:40:52

+0

@Steven Sudit - 確實如此,但您可以放入一個檢查:parts.length> 0?零件[parts.length - 1]:「」 – 2010-08-12 17:49:53

+0

真的,很好的電話。 – codykrieger 2010-08-12 17:52:36

1
var _collectCSGData = from line in File.ReadAllLines(path) 
         let parts = line.Split('|') 
         let assignment = parts[parts.length - 1] 
         select assignment; 

這應該工作,如果你需要按摩數據,let是你的朋友。

UPDATE:

由於部分可能是空的,你可以有:

let assignment = parts.length > 0 ? parts[parts.length - 1] : String.Empty 
0

如果你知道這是第三部分,如何添加到您的匿名構造函數:

var _collectCSGData = from line in File.ReadAllLines(path) 
         let parts = line.Split('|'); 
         select new 
         {ID = parts[0], Assignment = parts[1], Data = parts[2]}; 

或者,如果它只是「最後一個項目,無論多少項目」

var _collectCSGData = from line in File.ReadAllLines(path) 
         let parts = line.Split('|'); 
         select new 
         {ID = parts[0], Assignment = parts[1], Data = parts[part.length-1]};