العمل مع CSV في C# (.NET): المكتبات وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع CSV في C# (.NET): من التحليل البسيط إلى المكتبة المتقدمة



CSV (قيم مفصولة بفواصل) — أحد أكثر التنسيقات شيوعًا لتبادل البيانات الجدولية. في نظام .NET البيئي، توجد عدة طرق للعمل مع CSV: من الأدوات المضمنة إلى المكتبات المتخصصة. في هذه المقالة، سنستعرض جميع الطرق الرئيسية، ونعرض أمثلة الكود، ونساعدك في اختيار الأداة المثلى لمشروعك.



1. الأدوات المضمنة في .NET (التحليل اليدوي)

أبسط طريقة هي استخدام الفئات StreamReader و String.Split. ومع ذلك، لا تراعي هذه الطريقة هروب علامات الاقتباس والفواصل داخل الحقول، لذا فهي مناسبة فقط لملفات CSV البسيطة بدون بيانات معقدة.



using System;using System.IO;using System.Linq;

public class SimpleCsvReader{ public static void ReadCsv(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); // معالجة السطر Console.WriteLine(string.Join(" | ", values)); } } }}


العيوب: لا يعالج علامات الاقتباس، لا يدعم الحقول متعددة الأسطر، لا يوجد تحديد نوع.



2. استخدام TextFieldParser (Microsoft.VisualBasic)

الفئة TextFieldParser من مساحة الأسماء Microsoft.VisualBasic.FileIO تعرف كيفية معالجة CSV بشكل صحيح مع علامات الاقتباس والمحددات. للاستخدام، أضف مرجعًا إلى التجميعة Microsoft.VisualBasic.



using Microsoft.VisualBasic.FileIO;using System;

public class TextFieldParserExample{ public static void ParseCsv(string filePath) { using (var parser = new TextFieldParser(filePath)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;

while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); } } }}


هذه الطريقة أفضل، لكنها لا تزال تتطلب تعيين الحقول يدويًا إلى الكائنات.



3. مكتبة CsvHelper — المعيار الذهبي

CsvHelper — المكتبة الأكثر شيوعًا للعمل مع CSV في .NET. توفر دعمًا كاملاً لمعيار RFC 4180، وتعيينًا تلقائيًا للفئات، ودعمًا لـ LINQ، وأداءً عاليًا.



التثبيت

dotnet add package CsvHelper


مثال لقراءة CSV إلى قائمة كائنات

using CsvHelper;using CsvHelper.Configuration;using System.Globalization;using System.IO;using System.Linq;

public class Person{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public DateTime BirthDate { get; set; }}

public class CsvHelperReader{ public static List<Person> ReadPeople(string filePath) { using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { return csv.GetRecords<Person>().ToList(); } }}


مثال لكتابة CSV من مجموعة

public static void WritePeople(string filePath, List<Person> people){    using (var writer = new StreamWriter(filePath))    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))    {        csv.WriteRecords(people);    }}


التكوين المتقدم

var config = new CsvConfiguration(CultureInfo.InvariantCulture){    HasHeaderRec                    

توصيات