我在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(跳过第一行)?
答案 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]
};