2017-02-14 51 views
2

當我有這樣分割字符串讀取文件,而忽略一個字符串LINQ

56.32 211.398  1 81.0966 
56.55 21.6862  1 51.2413 
56.48 21.4071  2 298.1962 
52.69 211.017  2 262.2705 
53.88 211.759  3 258.1490 
56.08 21.3705  3 262.2397 

我想將它保存到一個列表,在第三位置 取出整數文件,所以我會得到

56.32, 211.398, 81.0966 
56.55, 21.6862, 51.2413 
56.48, 21.4071, 298.1962 
52.69, 211.017, 262.2705 
53.88, 211.759, 258.1490 
56.08, 21.3705, 262.2397 

我嘗試:

List<double[]> fileData = new List<double[]>(); 
fileData = System.IO.File.ReadAllLines(fileName) 
      .Select(x => x.Split(new char[] { '\t', ' ' }, 
        StringSplitOptions.RemoveEmptyEntries) 
      .Select(y => double.Parse(y)) 
      .ToArray()) 
      .ToList(); 

但我正在以下,怎麼不理第三數?

56.32, 211.398,1, 81.0966 
56.55, 21.6862,1, 51.2413 
56.48, 21.4071,2, 298.1962 
52.69, 211.017,2, 262.2705 
53.88, 211.759,3, 258.1490 
56.08, 21.3705,3, 262.2397 

回答

5

您可以使用使用拉姆達通過該指數考慮了指數和過濾Where()過載:

List<double[]> fileData = System.IO.File.ReadAllLines(fileName) 
      .Select(x => x.Split(new char[] { '\t', ' ' }, 
        StringSplitOptions.RemoveEmptyEntries) 
      .Where((s, index) => index != 2) // filters out the third column 
      .Select(y => double.Parse(y)) 
      .ToArray()) 
      .ToList(); 
0

我希望增加一個where子句前,您的最終選擇應該做的伎倆:

List<double[]> fileData = new List<double[]>(); 
fileData = System.IO.File.ReadAllLines(fileName) 
      .Select(x => x.Split(new char[] { '\t', ' ' }, 
        StringSplitOptions.RemoveEmptyEntries) 
      .Where(s=>s.Contains(".") 
      .Select(y => double.Parse(y)) 
      .ToArray()) 
      .ToList(); 
+0

這將採取除了第三! –