Làm cách nào để đọc tệp CSV bằng C#?Đọc tệp CSV bằng .NET?
Trả lời
Bạn có thể quan tâm đến thư viện Linq2Csv tại CodeProject. Một điều bạn sẽ cần phải kiểm tra là nếu nó đọc dữ liệu khi nó chỉ cần, vì vậy bạn sẽ không cần nhiều bộ nhớ khi làm việc với các tệp lớn hơn.
Để hiển thị dữ liệu trên trình duyệt, bạn có thể thực hiện nhiều việc, nếu bạn cụ thể hơn về yêu cầu của mình, câu trả lời có thể cụ thể hơn, nhưng bạn có thể làm như sau:
1. Sử dụng lớp HttpListener để viết máy chủ web đơn giản (bạn có thể tìm thấy nhiều mẫu trên mạng để lưu trữ máy chủ mini-http).
2. Sử dụng Asp.Net hoặc Asp.Net Mvc, tạo một trang, lưu trữ nó bằng IIS.
Tôi vừa sử dụng thư viện này trong đơn đăng ký của mình. http://www.codeproject.com/KB/database/CsvReader.aspx. Mọi thứ diễn ra suôn sẻ khi sử dụng thư viện này, vì vậy tôi giới thiệu nó. Nó hoàn toàn miễn phí theo Giấy phép MIT, vì vậy chỉ cần bao gồm thông báo với các tệp nguồn của bạn.
Tôi không hiển thị CSV trong trình duyệt, nhưng tác giả có một số mẫu cho Repeaters hoặc DataGrids. Tôi đã chạy một trong các dự án thử nghiệm của mình để kiểm tra một hoạt động sắp xếp mà tôi đã thêm và nó trông khá tốt.
Đây chỉ là để phân tích cú pháp CSV. Để hiển thị nó trong một trang web, nó chỉ đơn giản là vấn đề lấy danh sách và hiển thị nó theo bất cứ cách nào bạn muốn.
Lưu ý: Ví dụ mã này không xử lý tình huống trong đó chuỗi đầu vào line
chứa dòng mới.
public List<string> SplitCSV(string line)
{
if (string.IsNullOrEmpty(line))
throw new ArgumentException();
List<string> result = new List<string>();
int index = 0;
int start = 0;
bool inQuote = false;
StringBuilder val = new StringBuilder();
// parse line
foreach (char c in line)
{
switch (c)
{
case '"':
inQuote = !inQuote;
break;
case ',':
if (!inQuote)
{
result.Add(line.Substring(start, index - start)
.Replace("\"",""));
start = index + 1;
}
break;
}
index++;
}
if (start < index)
{
result.Add(line.Substring(start, index - start).Replace("\"",""));
}
return result;
}
}
Nó cũng không xử lý việc sử dụng các ký tự ngoặc kép trong một giá trị. CSV có nhiều trường hợp cạnh, tốt nhất là chỉ sử dụng thư viện. – Arafangion
Dường như có một vài dự án trên CodeProject hoặc CodePlex cho phân tích cú pháp CSV. Dưới đây là một CSV Parser trên CodePlex
http://commonlibrarynet.codeplex.com/
Thư viện này có các thành phần cho phân tích cú pháp CSV, INI tập tin phân tích cú pháp, Command-Line phân tích cú pháp là tốt. Nó hoạt động tốt cho tôi cho đến nay. Chỉ có điều là nó không có một CSV Writer.
Chỉ là một FYI: Giấy phép trên trang web nói rằng đó là MIT, nhưng trong chính mã nguồn, tất cả các tệp liên quan đến Csv đều có giấy phép LGPL nổi bật ở trên cùng. –
Bạn có thể thử CsvHelper, là dự án tôi làm việc. Mục tiêu của nó là làm cho việc đọc và ghi các tệp CSV dễ dàng nhất có thể, trong khi rất nhanh.
Dưới đây là một số cách bạn có thể đọc từ tệp CSV.
// By type
var records = csv.GetRecords<MyClass>();
var records = csv.GetRecords(typeof(MyClass));
// Dynamic
var records = csv.GetRecords<dynamic>();
// Using anonymous type for the class definition
var anonymousTypeDefinition =
{
Id = default(int),
Name = string.Empty,
MyClass = new MyClass()
};
var records = csv.GetRecords(anonymousTypeDefinition);
Lựa chọn, không sử dụng các thành phần của bên thứ ba, là sử dụng lớp Microsoft.VisualBasic.FileIO.TextFieldParser
(http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx). Nó cung cấp tất cả các chức năng để phân tích cú pháp CSV. Nó là đủ để nhập khẩu lắp ráp Microsoft.VisualBasic.
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(file);
parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
parser.SetDelimiters(new string[] { ";" });
while (!parser.EndOfData)
{
string[] row = parser.ReadFields();
/* do something */
}
Để đọc tệp CSV và tự cung cấp phân tích cú pháp, điều này lý tưởng. Đơn giản nhưng đầy đủ tính năng, bao gồm các giá trị được trích dẫn trên nhiều dòng. – ErikHeemskerk
Đây là giải pháp yêu thích của tôi về giải pháp hộp – Habeeb
Bạn có thể sử dụng Microsoft.VisualBasic.FileIO.TextFieldParser lớp trong C#:
using System;
using System.Data;
using Microsoft.VisualBasic.FileIO;
static void Main()
{
string csv_file_path = @"C:\Users\Administrator\Desktop\test.csv";
DataTable csvData = GetDataTableFromCSVFile(csv_file_path);
Console.WriteLine("Rows count:" + csvData.Rows.Count);
Console.ReadLine();
}
private static DataTable GetDataTableFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
try
{
using(TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
}
return csvData;
}
Thư viện này là giải pháp yêu thích của tôi trong giải pháp hộp. – Habeeb
Điều duy nhất tôi thay đổi từ ví dụ này là kiểm tra cùng tên cột và thêm một số mã để hiển thị ngoại lệ – andrewjboyd
Tôi khuyên bạn nên Angara.Table
, khoảng lưu/tải: http://predictionmachines.github.io/Angara.Table/saveload.html.
Nó làm cho suy luận kiểu cột, có thể lưu tệp CSV và nhanh hơn nhiều so với TextFieldParser.Nó theo RFC4180 cho định dạng CSV và hỗ trợ chuỗi nhiều dòng, NaN và chuỗi thoát có chứa ký tự dấu tách.
Thư viện dưới giấy phép MIT. Mã nguồn là https://github.com/Microsoft/Angara.Table.
Mặc dù API của nó tập trung vào F #, nhưng nó có thể được sử dụng trong bất kỳ ngôn ngữ .NET nào nhưng không gọn gàng như trong F #.
Ví dụ:
using Angara.Data;
using System.Collections.Immutable;
...
var table = Table.Load("data.csv");
// Print schema:
foreach(Column c in table)
{
string colType;
if (c.Rows.IsRealColumn) colType = "double";
else if (c.Rows.IsStringColumn) colType = "string";
else if (c.Rows.IsDateColumn) colType = "date";
else if (c.Rows.IsIntColumn) colType = "int";
else colType = "bool";
Console.WriteLine("{0} of type {1}", c.Name, colType);
}
// Get column data:
ImmutableArray<double> a = table["a"].Rows.AsReal;
ImmutableArray<string> b = table["b"].Rows.AsString;
Table.Save(table, "data2.csv");
Tôi đã được duy trì một dự án mã nguồn mở được gọi là trong nhiều năm nay. Nó có sẵn cho .NET Core và .NET 4.5.1. Không giống như hầu hết các lựa chọn thay thế, nó cho phép bạn định nghĩa một lược đồ (tương tự như cách làm việc của mã EF đầu tiên) với mức độ chính xác cực cao, do đó bạn không phải chống lại các vấn đề chuyển đổi mọi lúc. Bạn có thể ánh xạ trực tiếp tới các lớp dữ liệu của bạn, và cũng có hỗ trợ cho việc giao tiếp với các lớp ADO.NET cũ hơn.
Hiệu suất-khôn ngoan, nó được điều chỉnh để trở thành một trong những trình phân tích cú pháp nhanh nhất cho .NET, với rất nhiều tùy chọn cho sự khác biệt về định dạng kỳ quặc. Ngoài ra còn có hỗ trợ cho các tập tin có độ dài cố định, nếu bạn cần.
Đề nghị đọc: [Cách cung cấp thư viện mã nguồn mở cá nhân?] (// meta.stackexchange.com/q/229085) –
Bạn có thể thử Cinchoo ETL - một lib nguồn mở để đọc và ghi tệp CSV.
Couple cách bạn có thể đọc các tập tin CSV
Id, Name
1, Tom
2, Mark
Đây là cách bạn có thể sử dụng thư viện này để đọc nó
using (var reader = new ChoCSVReader("emp.csv").WithFirstLineHeader())
{
foreach (dynamic item in reader)
{
Console.WriteLine(item.Id);
Console.WriteLine(item.Name);
}
}
Nếu bạn có POCO đối tượng được xác định để phù hợp với tập tin CSV như bên dưới
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
Bạn có thể phân tích cùng một tệp bằng cách sử dụng lớp POCO này dưới đây
using (var reader = new ChoCSVReader<Employee>("emp.csv").WithFirstLineHeader())
{
foreach (var item in reader)
{
Console.WriteLine(item.Id);
Console.WriteLine(item.Name);
}
}
Vui lòng xem bài viết tại CodeProject về cách sử dụng.
Disclaimer: Tôi là tác giả của thư viện này
- 1. Viết tệp CSV bằng .net
- 2. Đọc tệp .csv trong php
- 3. Java: Tệp CSV đọc & ghi
- 4. Cách đọc tệp .RTF bằng .NET 4.0
- 5. Đọc Tệp PDF bằng iText5 cho .NET
- 6. Đọc 40 GB tệp csv thành R bằng bigmemory
- 7. Đọc tệp .csv từ xa bằng cách sử dụng opencsv
- 8. Cách đọc tệp CSV bằng cách sử dụng iOS
- 9. Đọc dữ liệu CSV từ một tệp
- 10. PHP đọc tệp csv hiệu quả
- 11. Đọc CSV từ bên trong Tệp Zip
- 12. Cách đọc tệp csv trong android?
- 13. Đọc/ghi các tệp phân tách CSV/tab trong C#
- 14. .NET System.OutOfMemoryException trên String.Split() của tệp CSV 120 MB
- 15. Tạo tệp csv bằng php
- 16. Đọc tệp CSV được sắp xếp theo chiều ngang
- 17. Đọc tệp csv, có số và chuỗi trong một cột
- 18. d3 - đọc dữ liệu JSON thay vì tệp CSV
- 19. Đọc các ký tự unicode từ tệp csv
- 20. Chiến lược để đọc trong tệp CSV thành nhiều phần?
- 21. Đọc các cột cụ thể từ tệp csv với mô-đun csv?
- 22. Định nghĩa nghiêm ngặt để đọc/ghi tệp CSV
- 23. Đọc cột cụ thể từ tệp CSV trong MATLAB
- 24. Đọc các tệp .csv vào danh sách Python
- 25. Tệp Groovy tải .csv
- 26. Nhập tệp csv lớn bằng phpMyAdmin
- 27. Chuyển tệp .csv thành .dbf bằng Python?
- 28. Vẽ bằng cách sử dụng tệp CSV
- 29. đọc tệp CSV với dấu phẩy trong các lĩnh vực bằng Python
- 30. Không thể đọc tệp csv đúng cách bằng cách sử dụng nhà cung cấp Microsoft.Jet.OLEDB.4.0
http://stackoverflow.com/questions/1898/csv-file-imports-in-net http://stackoverflow.com/questions/938291/import-csv-file-into-c http://stackoverflow.com/questions/316649/csv-parsing http://stackoverflow.com/questions/1047531/splitting-comma-seperated-values-csv http : //stackoverflow.com/questions/1103495/is-there-a-proper-way-to-read-csv-files –
[Top 6 cách để phân tích cú pháp .CSV? Hiệu suất cao!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –