Search…

Cấu Trúc File CSV và Cách Đọc - Ghi File CSV

30/07/20204 min read
File .csv là gì, cấu trúc file CSV - cách tạo, đọc ghi file csv với các trình soạn thảo. Sử dụng C# để đọc ghi file CSV.

Giới thiệu

CSV là định dạng file đơn giản được dùng để lưu trữ dữ liệu dạng bảng: bảng tính hoặc cơ sở dữ liệu. File nằm ở dạng CSV có thể được tạo hoặc hiển thị từ những phần mềm quản lý dữ liệu bảng như Microsoft Excel hoặc OpenOffice Calc.

CSV là viết tắt của cụm từ “comma-seperated values” (những giá trị được ngăn cách bởi dấu phẩy). Các trường dữ liệu thường được ngăn cách nhau bởi dấu phẩy.

Ví dụ bạn có bảng dữ liệu sau:

Tên Tuổi Khoa Điểm thi
Nguyễn Minh Thành 20 Khoa học máy tính 9
Nguyễn Đức Phú 19 An ninh mạng 8

Bảng dữ liệu trên khi được xuất sang file định dạng CSV sẽ có dạng sau:

Nguyễn Minh Thành,20,Khoa học máy tính,9
Nguyễn Đức Phú,19,Hệ thống thông tin,8

Có thể thấy rằng mỗi trường dữ liệu sẽ được ngăn cách bởi dấu phẩy mà mỗi đối tượng dữ liệu sẽ được ngăn cách bằng xuống hàng (các dòng).

File CSV là một file dữ liệu thuần, có nghĩa là nó có thể được tạo và chỉnh sửa bằng một trình văn bản (Notepad, Nodepad++, Visual Studio Code, Vim...). Tuy nhiên, CSV thường được tạo từ một bảng tính hoặc một cơ sở dữ liệu.

Cách tạo file CSV bằng editor cơ bản

Với Nodepad, để tạo file CSV với một trình chỉnh sửa văn bản, đầu tiên hãy mở trình chỉnh sửa văn bản để tạo tệp mới. Sau đó nhập dữ liệu vào trình chỉnh sửa văn bản với định dạng ngăn cách nhau bằng dấu phẩy và kết thúc hàng bằng cách xuống hàng.

Title1,Title2,Title3
one,two,three
vidu1,vidu2,vidu3

Sau đó lưu file với đuôi .csv. Sau đó bạn có thể mở file bằng Excel hoặc những trình bảng tính. Phần mềm sẽ tự động thể hiện bảng dữ liệu như sau:

Title1 Title2 Title3
one two three
vidu1 vidu2 vidu3

Trong file CSV được tạo ra, từng trường dữ liệu được ngăn cách bằng dấu phẩy, nhưng câu hỏi đặt ra là nếu bạn muốn giữ lại dấu phẩy đó thì nên làm như thế nào?

Nếu một trường dữ liệu trong file CSV có chứa dấu phẩy, bạn có thể đặt toàn bộ phần dữ liệu trong dấu ngoặc kép để giữ chúng lại. Lúc này, dấu phẩy trong dấu ngoặc kép sẽ được xem là dữ liệu chứ không còn đóng vai trò vách ngăn nữa.

Ví dụ với bảng sau:

Sinh viên Điểm thi
Nguyễn Minh Thành 9,8
Nguyễn Đức Phú 7,5
Nguyễn Huỳnh Thảo Nhi 8

Thì file CSV sẽ có nội dung như sau:

Sinh viên,Điểm thi
Nguyễn Minh Thành,"8,7"
Nguyễn Đức Phú,"7,5"
Nguyền Huỳnh Thảo Nhi,8

Tương tự với dấu xuống dòng và dấu ngoặc kép, nếu bạn muốn giữ chúng lại, hãy đặt chúng trong hai dấu ngoặc kép và chúng sẽ được giữ lại trong 1 field.

Họ tên Bình luận
Phuc Tran "Dòng 1.
Dòng 2."
Họ tên,Bình luận
Phuc Tran,"Dòng 1.
Dòng 2."

Cấu trúc file CSV

1. Mỗi đối tượng dữ liệu nằm trên một hàng riêng biệt, cách biệt nhau bằng dấu xuống dòng.

data_11,data_12,data_13<xuống dòng>
data_21,data_22,data_23

2. Đối tượng cuối cùng của dữ liệu không cần có dấu xuống dòng.

data_11,data_12,data_13<xuống dòng>
data_21,data_22,data_23<không cần xuống dòng>

3. Không cần thiết phải có một dòng đầu để chứa tên trường của dữ liệu, tuy nhiên về mặt tiện ích sử dụng, dòng này giúp bạn định nghĩa được tên trường (tên cột).

Tên sản phẩm,Giá,Số lượng
iPhone,15000000,1
Android,3000000,2

4. Số lượng trường phải bằng nhau ở mỗi hàng.

5. Bất kỳ dấu nào - khoảng trắng, khoảng cách cũng được xem như một phần của trường dữ liệu.

6. Kết thúc một đối tượng không nên có dấu phẩy cuối cùng.

7. Dấu ngoặc kép phải nằm ở đầu và cuối trường dữ liệu, không nên nằm trong trường dữ liệu.

8. Những trường dữ liệu bao gồm dấu phẩy, dấu xuống dòng phải nằm trong dấu ngoặc kép.

9. Nếu có dấu ngoặc kép trong trường dữ liệu thì phải có dấu ngoặc kép đầu và cuối trường dữ liệu. Dấu ngoặc kép trong trường dữ liệu phải đi theo cặp.

"Du lieu co 2 dau ""ngoac kep"" de biet la dau ngoac kep"

Sử dụng phần mềm như Microsoft Exel, OpenOffice Calc hay Google Sheets bạn có thể tạo ra file CSV này dễ dàng, khi lưu lại bạn lựa chọn lưu trữ dưới dạng CSV. Lưu ý rằng CSV là dữ liệu dạng đơn giản nên không được có quá nhiều format đặc biệt.

Đọc ghi file CSV với C#

Cài đặt FileHelpers: Install-Package FileHelpers

Product.cs

using System;
using FileHelpers;

namespace StdioTraining
{
    [DelimitedRecord(",")]
    [IgnoreEmptyLines()]
    [IgnoreFirst()]
    class Product
    {
        private string name;
        private string price;

        [FieldQuoted('"', QuoteMode.OptionalForBoth)]
        public string Name { get => name; set => name = value; }
        [FieldQuoted('"', QuoteMode.OptionalForBoth)]
        public string Price { get => price; set => price = value; }

        public void Show()
        {
            Console.WriteLine("Name: " + this.name + " ### Price: " + this.price);
        }
    }
}

Đọc file CSV

string filePath = "D:/products.csv";

var engine = new FileHelperEngine(typeof(Product));
var products = (Product[])engine.ReadFile(filePath);

for (int i = 0; i < products.Length; i++)
{
    products[i].Show();
}

Ghi file CSV

FileHelperEngine engine = new FileHelperEngine(typeof(Product));

List products = new List();

Product temp = new Product("iPhone 5", 3500000);
products.Add(temp);
        
string filename = "D:/products.csv";
engine.HeaderText = "Name,Price";

engine.WriteFile(filePath, products);

Hoặc tải code tại đây.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024