Tôi đã viết TinyCsvParser cho .NET, đây là một trong những trình phân tích cú pháp .NET nhanh nhất và có khả năng cấu hình cao để phân tích hầu hết mọi định dạng CSV.
Nó được phát hành theo Giấy phép MIT:
Bạn có thể sử dụng NuGet để cài đặt nó. Chạy lệnh sau trong Bảng điều khiển quản lý gói .
PM> Install-Package TinyCsvParser
Sử dụng
Hãy tưởng tượng chúng ta có danh sách Người trong tệp CSV persons.csv
có tên, họ và ngày sinh của họ.
FirstName;LastName;BirthDate
Philipp;Wagner;1986/05/12
Max;Musterman;2014/01/02
Mô hình miền tương ứng trong hệ thống của chúng tôi có thể trông như thế này.
private class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
}
Khi sử dụng TinyCsvParser, bạn phải xác định ánh xạ giữa các cột trong dữ liệu CSV và thuộc tính trong mô hình miền của bạn.
private class CsvPersonMapping : CsvMapping<Person>
{
public CsvPersonMapping()
: base()
{
MapProperty(0, x => x.FirstName);
MapProperty(1, x => x.LastName);
MapProperty(2, x => x.BirthDate);
}
}
Và sau đó chúng ta có thể sử dụng ánh xạ để phân tích dữ liệu CSV bằng a CsvParser
.
namespace TinyCsvParser.Test
{
[TestFixture]
public class TinyCsvParserTest
{
[Test]
public void TinyCsvTest()
{
CsvParserOptions csvParserOptions = new CsvParserOptions(true, new[] { ';' });
CsvPersonMapping csvMapper = new CsvPersonMapping();
CsvParser<Person> csvParser = new CsvParser<Person>(csvParserOptions, csvMapper);
var result = csvParser
.ReadFromFile(@"persons.csv", Encoding.ASCII)
.ToList();
Assert.AreEqual(2, result.Count);
Assert.IsTrue(result.All(x => x.IsValid));
Assert.AreEqual("Philipp", result[0].Result.FirstName);
Assert.AreEqual("Wagner", result[0].Result.LastName);
Assert.AreEqual(1986, result[0].Result.BirthDate.Year);
Assert.AreEqual(5, result[0].Result.BirthDate.Month);
Assert.AreEqual(12, result[0].Result.BirthDate.Day);
Assert.AreEqual("Max", result[1].Result.FirstName);
Assert.AreEqual("Mustermann", result[1].Result.LastName);
Assert.AreEqual(2014, result[1].Result.BirthDate.Year);
Assert.AreEqual(1, result[1].Result.BirthDate.Month);
Assert.AreEqual(1, result[1].Result.BirthDate.Day);
}
}
}
Hướng dẫn sử dụng
Hướng dẫn sử dụng đầy đủ có sẵn tại: