มีห้องสมุดผู้อ่าน / นักเขียน CSV ใน C # หรือไม่ [ปิด]


111

มีห้องสมุดผู้อ่าน / นักเขียนCSVใน C # หรือไม่


68
ฉันขอแตกต่าง นี้แน่นอนเป็นคำถามที่สร้างสรรค์และผลแรกใน google .net csv libraryสำหรับ แม้ว่าจะมีหลักฐานเพียงเล็กน้อยสำหรับการอ้างสิทธิ์ของฉันก็คือคำถามนี้มีผู้ดูมากกว่า 22000 ครั้งในช่วงหกปีที่ผ่านมา
shovavnik

5
พูดจริง - ตีครั้งแรกใน Google
Robetto

คำตอบ:


107

ลองCsvHelper ใช้งานง่ายเหมือน FastCsvReader และเขียนด้วย ฉันมีความสุขมากกับ FastCsvReader ในอดีต แต่ฉันต้องการบางสิ่งที่เขียนด้วยและไม่พอใจกับ FileHelpers

การอ่าน:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

การเขียน:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้เขียนห้องสมุดนี้


3
ขอบคุณ Josh ฉันให้มันไปและมันทั้งเร็วและมีประสิทธิภาพของหน่วยความจำ ฉันคิดว่าเอกสารควรปรับปรุงเล็กน้อยสำหรับผู้ใช้ครั้งแรก แต่ก็เพียงพอแน่นอน
แซม

มีวิธีใช้ไลบรารีนี้โดยไม่มีประเภทที่กำหนดเองหรือไม่เพื่อให้ฉันสามารถวนซ้ำผ่านตารางตาราง (กำหนดเอง) และเขียนส่วนหัวแล้วส่งผ่านแต่ละเขตข้อมูลแถว ฉันกำลังมองหาวิธีป้องกันข้อผิดพลาดในไฟล์ (การหลีกเลี่ยงอย่างถูกต้อง ฯลฯ )
u84six

ใช่. คุณสามารถใช้WriteField. ตรวจสอบเอกสารที่นี่joshclose.github.io/CsvHelper
Josh Close

1
@Zimano ไม่จริง. คุณสามารถอ่านแต่ละฟิลด์หรือแม้แต่รับสตริงอาร์เรย์สำหรับแถว ตรวจสอบเอกสารประกอบ joshclose.github.io/CsvHelper
Josh ปิด

@JoshClose โอ้ดีที่ได้ยินขอบคุณ! ฉันดูคู่มือเริ่มต้นใช้งานที่นี่เท่านั้น: joshclose.github.io/CsvHelper/…และไม่รวมกรณีการใช้งานของฉัน ฉันควรจะดูต่อไปขอโทษด้วย CsvHelperอย่างไรก็ตามในหน้านั้นมันไม่บอกว่าใช้การทำแผนที่ของบางชนิดเป็นวิธีที่แนะนำให้ใช้ บางทีอาจเสนอกลยุทธ์การอ่านทางเลือกในจุดนั้น? ฉันได้ลบคำพูดเดิมของฉันไปแล้วเพราะตอนนี้มันไม่เกี่ยวข้อง :-)
Zimano

21

มีสองทางเลือกในกรอบ

หนึ่งในวิธีที่ง่ายที่สุดคือการอ้างอิง Microsoft.VisualBasic แล้วใช้TextFieldParser เป็นโปรแกรมอ่าน CSV ที่ทำงานได้อย่างสมบูรณ์ในกรอบงานหลัก

อีกทางเลือกที่ดีคือการใช้ชุดข้อมูลในการอ่านไฟล์ CSV


6
ฉันสงสัยเสมอว่าทำไมมันถึงอยู่ในแอสเซมบลี Microsoft.VisualBasic ... MS คิดว่านักพัฒนา C # ไม่ใช้ CSV หรือเปล่า?
Thomas Levesque

4
@Thomas: โดยเฉพาะอย่างยิ่งเมื่อนักพัฒนา C # จำนวนมากประจบประแจงความคิดของการรวม VisualBasic ในโครงการของพวกเขา

2
ใช่มี "สารพัด" ดีๆอยู่ในนั้น ฉันคิดว่ามันมากกว่านั้นเพราะ VB มีโครงสร้างภาษาที่ไม่ได้รับการพิจารณาในเฟรมเวิร์ก แต่เดิม แต่พวกเขาจะไม่สามารถรับผู้ใช้ VB6 ได้โดยไม่ต้องใช้งาน เนมสเปซของอุปกรณ์และ ApplicationServices มีสิ่งที่มีประโยชน์ทุกประเภท
Reed Copsey

20
@ Roboto ผู้พัฒนา C # ใด ๆ ที่อ้างถึง Microsoft.VisualBasic ในโครงการของพวกเขาเป็นภาษาที่โง่เขลา ยิ่งแย่ไปกว่านั้นพวกเขาไม่เข้าใจ. NET เลย
เถ้า

3
อัญมณีประกอบ VB อื่นคือ CopyDirectory: stackoverflow.com/questions/58744/…

17

เซบาสเตียน Lorion ได้ดีCSVอ่านบน CodeProject เรียกว่ารวดเร็ว CSV อ่าน อาจเป็นหนึ่งในสิ่งที่ดีที่สุดสำหรับ C # และฟรี

เท่าที่เขียนใช้แค่StreamWriter.

นี่คือโค้ดสำเร็จรูปสำหรับเขียนDataGridViewไฟล์:

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
นี่คือรายการโปรดของฉัน ห้องสมุดเล็ก ๆ ที่ยอดเยี่ยม
Alex

2
การเขียน CSV เป็นเรื่องง่ายเพียงใช้วิธีการส่งออกข้อความปกติและคั่นด้วยเครื่องหมายจุลภาค คุณต้องการแค่ไลบรารี / ตัวจัดการแบบกำหนดเองเท่านั้นสำหรับการอ่าน ...
Reed Copsey

10
@Reed: ไม่ใช่เรื่องเล็กน้อยเกินไปหากคุณต้องการให้เครื่องหมายจุลภาคและเครื่องหมายอัญประกาศหนีอย่างถูกต้อง ฉันไม่แน่ใจด้วยซ้ำว่ามีการกำหนดมาตรฐานสำหรับสิ่งนี้หรือไม่ แต่เป็นเรื่องปกติที่จะทำ
Stefan Steinegger

26
การเขียน CSV นั้นซับซ้อนกว่านั้นเล็กน้อย หากข้อมูลที่คุณต้องการแสดงในไฟล์ CSV มีลูกน้ำหรือบรรทัดใหม่คุณต้องล้อมรอบข้อมูลด้วยเครื่องหมายคำพูด หากมีเครื่องหมายคำพูดในข้อมูลที่ทำเครื่องหมายคำพูดใหม่คุณจะต้องออกจากเครื่องหมายคำพูดที่มีเครื่องหมายคำพูดคู่ คุณสามารถเขียนรหัสตรรกะนั้นด้วยตัวเองได้อย่างแน่นอน แต่จะเป็นการดีที่ห้องสมุดจะทำเพื่อคุณ
Tinister

4
การกำหนดมาตรฐานคือ RFC 4180 tools.ietf.org/html/rfc4180
Josh Close

7

ใช่ - แม้ว่าฉันคิดว่าคุณกำลังขอข้อมูลที่เฉพาะเจาะจงจริง ๆ ?

ลองFileHelpers


ฉันทำ แต่ด้วยเหตุผลแปลก ๆ FileHelpers แตกแบบสุ่ม นอกจากนี้ไลบรารี FileHelpers ไม่ได้รับการพัฒนามาเป็นเวลานาน
Erik Schierboom

1
FileHelpers มีการพัฒนาอย่างแข็งขันตอนนี้ดูGitHub
xmedeko

3

มีหลายสิบตัว

http://www.filehelpers.net/เป็นส่วนใหญ่

ฉันควรจะบอกว่าฉันพบว่า Filehelpers มีข้อ จำกัด ในบางสถานการณ์และใช้โปรแกรมอ่าน Fast CSVแทน จากประสบการณ์ของฉันหากคุณไม่ทราบรูปแบบของไฟล์ CSV หรือการนำเข้าการแมปจนถึงรันไทม์นี่เป็นไลบรารีที่ดีกว่าที่จะใช้


เราใช้ filehelpers ด้วย
Tangurena

1
ฉันพบว่า FileHelpers สร้างความรำคาญในการกำหนดค่า FastCsvReader ใช้งานง่ายกว่ามาก
Josh Close

+1 สำหรับ FastCsvReader ประสิทธิภาพที่ยอดเยี่ยม แต่ส่วนใหญ่เป็นผู้อ่าน / ตัวแยกวิเคราะห์ ไม่ใช่นักเขียน
Mehdi LAMRANI
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.