【发布时间】:2021-03-24 14:07:43
【问题描述】:
我有一张来自 Microsoft 团队的奇怪 CSV 格式的考勤表,我需要将其存储在数据库中。我上传了 csv 文件(从上面)并想要解析数据。
我只是对收到电子邮件和加入时间感兴趣。
这是我迄今为止尝试过的 -
var path = Path.Combine(filePath, e.File.GetName());
var csvRows = System.IO.File.ReadAllLines(path, Encoding.Default).ToList();
List<Foo> lst = new List<Foo>();
foreach (var row in csvRows.Skip(7))
{
Foo foo = new Foo();
var columns = row.Split(';');
foo.JoinTime= columns[0];
foo.Email = columns[1];
lst.Add(foo);
}
我知道我很接近,但想探索一种更好的方法并以正确的格式获取数据。
【问题讨论】:
-
CSV helper 是一个很好的读取 csv 的库。相关:How to read a header from a specific line with CsvHelper?.
-
我也建议不要在 SO 上使用图片。如果有人想制定解决方案,他必须自己输入所有内容。
-
顺便说一句
ReadAllLines返回一个string[]。不需要ToList。如果您打算跳过其中的 7 个,您可以使用ReadLines方法,该方法将返回IEnumerable。 -
那么,您目前的方法有什么不工作的地方?除了明显的时间在
columns[1]和电子邮件在columns[4]之外,您可能需要对时间进行某种解析...... -
您可能还想更好地定义。因为你可以一行
var result = File.ReadLines(path, Encoding.Default).Skip(7).Select(x=> x.Split(';')).Select(x=> new Foo{JoinTime= columns[0],Email = columns[1]}).ToList();但它几乎不会更好或最坏。