c# - 从特定行读取 CSV 文件
问题描述
我有一张来自 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);
}
我知道我很接近但想探索一种更好的方法并以正确的格式获取数据。
解决方案
使用Cinchoo ETL,您可以解析 csv,如下所示。
PS。仅当 CSV 文件中有固定数量的要忽略的行时,此方法才有效
foreach (var rec in new ChoCSVReader("**** YOUR CSV FILE PATH ***")
.HeaderLineAt(7)
.WithDelimiter(";")
.ConfigureHeader(h => h.HasHeaderRecord = true)
)
{
Console.WriteLine(rec["Full Name"]);
Console.WriteLine(rec["Join Time"]);
}
更新: 基于下面提供的示例 CSV,这里是工作示例。
您提供的示例 CSV 假定为制表符分隔符。
string csv = @"Meeting Summary
Total Number of Participants 4
Meeting Title Test
Meeting Start Time 3/11/2021, 12:57:48 PM
Meeting End Time 3/11/2021, 1:28:13 PM
Full Name Join Time Leave Time Duration Email Role
Smith, John. 3/11/2021, 12:57:48 PM 3/11/2021, 1:28:08 PM 30m 20s TEST39@test.com Presenter
Marshall, Micah D. 3/11/2021, 12:59:11 PM 3/11/2021, 1:28:07 PM 28m 56s TEST18@test.com Presenter
Hugh, Grant V. 3/11/2021, 1:00:08 PM 3/11/2021, 1:28:13 PM 28m 5s TEST5@test.com Organizer
Cole, Brad R. 3/11/2021, 1:27:03 PM 3/11/2021, 1:28:07 PM 1m 4s TEST4@test.COM Presenter";
try
{
foreach (var rec in ChoCSVReader.LoadText(csv)
.HeaderLineAt(7)
.WithDelimiter("\t")
.ConfigureHeader(h => h.HasHeaderRecord = true)
)
{
Console.WriteLine(rec["Full Name"]);
Console.WriteLine(rec["Join Time"]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
推荐阅读
- sql - SQL 日历表以填充累积总和的缺失日期值
- android - 在 Manifest 中使用 android:allowBackup="false" 时,sharedpreferences 在更新到新版本时被清除?
- ios - Swift - 在保留顶部锚点的同时缩放背景
- python - 如何在 Python 中使用斯坦福 NER?
- html - 让 MDC 抽屉出现在顶部应用栏下方
- php - 自定义数据标签中的 woocommerce wc_rbp_product_sales_price
- c++ - 了解 new[] 中的顺序
- ruby-on-rails-4 - 是否可以在 Rails 中创建多级环境定义?
- java - Java 项目中未加载证书文件
- vba - 忽略循环 VBA 中的隐藏行