在读取文件时拆分字符串并忽略一个字符串LINQ

时间:2017-02-14 16:25:26

标签: c# 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

我想将它保存到List,删除第三个位置的整数 所以我会得到

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

3 个答案:

答案 0 :(得分:6)

您可以使用Where()重载,该重载使用带有索引的lambda并按该索引过滤:

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();

答案 1 :(得分: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();

答案 2 :(得分:0)

正则表达式进行救援:

var doubles = Regex.Split(text, @"\s{2,}\d+\s|\r\n|\s").Select(s => double.Parse(s));