使用Linq读取CSV

时间:2014-11-06 20:43:50

标签: c# linq csv

我在CSV文件中有以下行(更多,但此示例很好)。

Date,Open,High,Low,Close,Volume,Adj Close
2012-11-01,77.60,78.12,77.37,78.05,186200,78.05
2012-10-31,76.96,77.75,76.96,77.47,290700,77.47
2012-10-26,77.30,77.62,76.86,77.36,195100,77.36

我需要对数据执行几个不同的功能,每个功能只需要一行中的某些字段。即功能1需要来自每一行的第2和第3组数据,功能2将需要第4组数据。如何使用LINQ(跳过第一行)?

2 个答案:

答案 0 :(得分:3)

你可以试试这个: -

            var lines = File.ReadAllLines(@"Linq.csv").Select(x => x.Split(','));
            //Considering each line contains same no. of elements
            int lineLength = lines.First().Count();  
            var CSV = lines.Skip(1)
                       .SelectMany(x => x)
                       .Select((v, i) => new { Value = v, Index = i % lineLength })
                       .Where(x => x.Index == 2 || x.Index == 3)
                       .Select(x => x.Value);
            foreach (var data in CSV)
            {
                Console.WriteLine(data);
            }

步骤: -

步骤1 - 从CSV文件中读取所有行并用逗号(,)分割它们,这将产生一个包含每个值的数组os字符串。

第2步 - 跳过第一个数组(持有标题),然后使用SelectMany将列表展平为一个,接下来你需要设置每个集合的索引(在展平列表中)类似,我正在使用Select opertaor,剩下的最后一件事就是过滤&选择项目。

答案 1 :(得分:0)

您可以尝试功能1

的下方代码
var stuff = from l in File.ReadAllLines(filename)
        let x = l.Skip(1).Split(new [] {',', ' '}, StringSplitOptions.RemoveEmptyEntries)
                 .Select(s => s)
                 .select new
                    {
                      second= s[1],
                      third= s[2]
                    };