我试图找到一个如何使用linq读取csv文件的示例。我的问题是到目前为止我找到的例子,csv文件存储在本地机器上,我从azure中提取csv文件。这是我到目前为止找到的例子:
var stuff = from l in File.ReadLines(filename)
let x = l.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1)
.Select(s => int.Parse(s))
select new
{
Sum = x.Sum(),
Average = x.Average()
};
问题在于我从Azure中获取,我必须使用DownloadToStream并将文件移动到MemoryStream。当我必须使用MemoryStream时,应该替换“File.ReadLines(filename)”?
答案 0 :(得分:0)
在Stream
中获得数据后,有很多库可以让您轻松阅读CSV。您要避免使用Split()
,因为CSV比这更复杂,容易出错。
要执行此操作的一个库是Ctl.Data NuGet包:
class MyPoco
{
// CSV file must have a header with these property names.
public int Foo { get; set; }
public string Bar { get; set; }
public DateTime Baz { get; set; }
public static IEnumerable<MyPoco> Read(CloudBlockBlob blob)
{
using(Stream s = blob.OpenRead())
using(StreamReader sr = new StreamReader(s))
{
foreach(MyPoco x in Ctl.Data.Formats.Csv.ReadObjects<MyPoco>(sr))
{
yield return x;
}
}
}
}
(警告:我是这个包的作者)