[LINQ và chuỗi] Phần 7: Cách sắp xếp các trường của 1 tập tin dạng CSV bằng LINQ

54 lượt xem

Tập tin (CSV) là tập tin văn bản chứa các giá trị ngăn cách nhau bằng dấu phẩy, thường được sử dụng để lưu trữ dữ liệu hoặc các dữ liệu ngăn cách nhau bằng Tab thể hiển dòng hay cột. Bằng cách dùng phương thức Split để tách các trường dữ liệu, việc truy vấn và thực thi tập tin CSV bằng LINQ rất đơn giản. Thật vậy, cùng kỹ thuật này có thể sắp xếp các phần của bất kỳ tập tin văn bản có cấu trúc nào, không riêng gì các tập tin CSV. Nếu bạn chuyển tập tin Excel (.xls) thành csv, bạn cũng có thể dùng cách này để sắp xếp trường dữ liệu.

Trong ví dụ sau, có 3 cột thể hiện thông tin của 1 danh sách sinh viên như Last Name, First Name và ID. Nhiệm vụ cần thực hiện là sắp xếp danh sách này theo thứ tự ID tăng dần và trộn giá trị cột Last Name và First Name với nhau.

Đầu tiên, chúng ta phải có tập tin CSV, để tạo tập tin này, bạn copy đoạn sau vào Notepad và lưu tập tin với tên dammio.csv.

Adams,Terry,120
Fakhouri,Fadi,116
Feng,Hanying,117
Garcia,Cesar,114
Garcia,Debra,115
Garcia,Hugo,118
Mortensen,Sven,113
O'Donnell,Claire,112
Omelchenko,Svetlana,111
Tucker,Lance,119
Tucker,Michael,122
Zabokritski,Eugene,121

Sau đó tạo 1 dự án Console C# và thực thi đoạn mã sau:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQ
{
    class Program
    {
        static void Main(string[] args)
        {
            // Tạo nguồn dữ liệu IEnumerable --- dammio.com
            // Tập tin dammio.csv nằm ở thư mục Debug của dự án
            string[] lines = System.IO.File.ReadAllLines(@"dammio.csv");

            // Tạo truy vấn. Đặt trường số 2 (ID) đầu tiên, sau đó
            // sắp xếp tăng dần và trộn trường số 0 (Last Name) và 1 (First Name) với nhau
            IEnumerable<string> query =
                from line in lines
                let x = line.Split(',')
                orderby x[2]
                select x[2] + ", " + (x[1] + " " + x[0]);

            // Thực thi truy vấn và viết nội dung vào tập tin dammio.csv. Lưu ý WriteAllLines 
            // sẽ lấy 1 mảng string[], vì vậy ToArray được gọi trên truy vấn.
            System.IO.File.WriteAllLines(@"dammio.csv", query.ToArray());

            Console.WriteLine("dammio.csv da duoc ghi vao dia. Nhan bat ky phim nao de thoat!");
            Console.ReadKey();
        }

        /* Kết quả
        111, Svetlana Omelchenko
        112, Claire O'Donnell
        113, Sven Mortensen
        114, Cesar Garcia
        115, Debra Garcia
        116, Fadi Fakhouri
        117, Hanying Feng
        118, Hugo Garcia
        119, Lance Tucker
        120, Terry Adams
        121, Eugene Zabokritski
        122, Michael Tucker
         */
    }
}

OK vậy là xong, bạn chỉ cần nhấn F5 thực thi dự án và tập tin kết quả dammio.csv nằm ở thư mục Debug của dự án, bạn có thể thấy dữ liệu trong tập tin này đã được sắp xếp.

Bình luận Facebook

Để lại bình luận

Hãy là người đầu tiên bình luận!

Thông báo khi có
avatar
1000
wpDiscuz