2017-02-14 58 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

这将采取除了第三! –