क्या C # में कोई CSV पाठक / लेखक पुस्तकालय हैं? [बन्द है]


111

क्या C # में कोई CSV पाठक / लेखक पुस्तकालय हैं?


68
क्षमा करें मैं असहमत हूं। यह निश्चित रूप से एक रचनात्मक सवाल है और इसके लिए Google पर पहला परिणाम है .net csv library। साक्ष्य, हालांकि मेरे दावे के लिए, यह है कि यह सवाल पिछले छह वर्षों में 22000 से अधिक बार देखा गया है।
शोवनिक 25

5
सच कहा - पहले गूगल पर हिट
Robetto

जवाबों:


107

CsvHelper को आज़माएं । यह FastCsvReader के रूप में उपयोग करना आसान है और लेखन भी करता है। मैं पिछले दिनों FastCsvReader से बहुत खुश था, लेकिन मुझे कुछ ऐसा चाहिए था जो लेखन भी करता हो, और FileHppers से खुश नहीं था।

पढ़ना:

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

लिख रहे हैं:

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

पूर्ण प्रकटीकरण: मैं इस पुस्तकालय का लेखक हूं।


3
धन्यवाद, जोश। मैंने इसे दिया, और यह तेज और स्मृति दोनों कुशल था। मुझे लगता है कि पहली बार उपयोगकर्ताओं के लिए प्रलेखन में थोड़ा सुधार किया जा सकता है, लेकिन यह निश्चित रूप से पर्याप्त था।
सैम

क्या इस पुस्तकालय को बिना कस्टम प्रकार के उपयोग करने का कोई तरीका है ताकि मैं सिर्फ अपनी टेबल ग्रिड (कस्टम) के माध्यम से पुन: लिख सकूं और हेडर लिख सकूं और फिर प्रत्येक पंक्ति क्षेत्र को पास कर सकूं? मैं बस फाइलों में त्रुटियों को रोकने के लिए (ठीक से भागने आदि) के लिए एक रास्ता खोज रहा हूं।
21

हाँ। आप उपयोग कर सकते हैं WriteField। डॉक्स यहाँ देखें joshclose.github.io/CsvHelper
जोश

1
@Zimano सच नहीं है। आप अलग-अलग फ़ील्ड पढ़ सकते हैं या यहां तक ​​कि पंक्ति के लिए केवल एक स्ट्रिंग सरणी प्राप्त कर सकते हैं। डॉक्यूमेंटेशन देखें। joshclose.github.io/CsvHelper
जोश बंद

@JoshClose ओह, यह सुनने के लिए अच्छा है, धन्यवाद! मैंने केवल यहाँ आरंभ होने वाले गाइड की जाँच की: joshclose.github.io/CsvHelper/… और इसमें मेरा उपयोग मामला शामिल नहीं था। मुझे आगे देखना चाहिए था, मेरी क्षमायाचना। हालाँकि, उस पृष्ठ पर यह कहा गया है कि किसी प्रकार की मैपिंग का उपयोग करने के लिए अनुशंसित तरीका है CsvHelper। शायद यह उस जगह पर कुछ वैकल्पिक पठन रणनीतियों की पेशकश कर सकता है? मैंने अपनी मूल टिप्पणी को वैसे ही हटा दिया है, जैसा कि अब यह अप्रासंगिक है :-)
ज़िमानो

21

विकल्पों में से कुछ हैं, फ्रेमवर्क में ही सही।

सबसे आसान में से एक है Microsoft.VisualBasic को संदर्भित करना, फिर TextFieldParser का उपयोग करना । यह कोर फ्रेमवर्क में पूरी तरह कार्यात्मक CSV रीडर है।

एक और अच्छा विकल्प CSV फ़ाइलों को पढ़ने के लिए डेटासेट का उपयोग करना है


6
मैं हमेशा सोचता था कि यह Microsoft.VisualBasic असेंबली में क्यों था ... क्या MS को लगता है कि C # डेवलपर्स ने CSV का उपयोग नहीं किया?
थॉमस लेवेस्क

4
@ थोमस: खासकर तब से जब सी # डेवलपर्स के बहुत सारे प्रोजेक्ट्स में

2
हाँ - वहाँ में बहुत सारे "अच्छे" हैं। मुझे लगता है कि यह अधिक है क्योंकि VB में कुछ भाषा निर्माण हैं जिन्हें वास्तव में मूल रूप से फ्रेमवर्क में नहीं माना गया था, लेकिन वे वीबी 6 उपयोगकर्ताओं को कभी भी उन्हें लागू किए बिना प्राप्त नहीं कर पाएंगे। डिवाइसेस और एप्लिकेशन सर्वर नामस्थान में सभी प्रकार की उपयोगी चीजें हैं।
रीड कोपसे डे

20
@ रोबोटो, कोई भी C # डेवलपर जो Microsoft.VisualBasic को अपने प्रोजेक्ट में संदर्भित करता है, वह एक अज्ञानी भाषा स्नोब है। इससे भी बदतर वे .NET को बिल्कुल भी नहीं समझते हैं।
ऐश

3
एक अन्य VB असेंबली रत्न है CopyDirectory: stackoverflow.com/questions/58744/…

17

सेबेस्टियन लोरियन में कोडप्रोजेक्ट पर एक महान 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
यह मेरा पसंदीदा है। महान छोटी लाइब्रेरी।
एलेक्स

2
CSV लिखना आसान है - बस एक सामान्य पाठ आउटपुट विधि का उपयोग करें, और अल्पविराम द्वारा अलग करें। पढ़ने के लिए आपको वास्तव में केवल एक पुस्तकालय / कस्टम हैंडलर की जरूरत है ...
रीड कोपसे

10
@ लीड: यदि आप अल्पविराम और उद्धरण चिह्न सही ढंग से बचाना चाहते हैं तो यह बहुत तुच्छ नहीं है। अगर इसके लिए कोई मानकीकरण है तो भी मुझे यकीन नहीं है, लेकिन ऐसा करना बहुत आम है।
स्टीफन स्टाइनगर

26
CSV लिखना उससे कुछ अधिक जटिल है। यदि आप CSV फ़ाइल में व्यक्त किए गए डेटा में कॉमा या नई लाइनें हैं, तो आपको उद्धरण चिह्नों के साथ डेटा को घेरना होगा। यदि नए उद्धरण-चिह्नित डेटा में एक उद्धरण चिह्न है, तो आपको दोहरे उद्धरण चिह्नों के साथ उद्धरण चिह्न से बचने की आवश्यकता है। आप निश्चित रूप से उस तर्क को स्वयं कोड कर सकते हैं लेकिन लाइब्रेरी के लिए यह आपके लिए अच्छा होगा।
टिनिस्टर

4
मानकीकरण RFC 4180 है। tools.ietf.org/html/rfc4180
जोश

7

हां - हालांकि मुझे लगता है कि आप वास्तव में बारीकियों के लिए पूछ रहे हैं?

FileHelpers का प्रयास करें


ठीक है, मैंने किया लेकिन कुछ अजीब कारण के लिए FileHelpers बेतरतीब ढंग से टूट गए। इसके अलावा, FileHelpers लाइब्रेरी लंबे समय से विकास में नहीं है।
एरिक शियरबॉम

1
FileHelpers अब सक्रिय रूप से विकसित हैं, GitHub देखें ।
xmedeko

3

दर्जनों हैं।

http://www.filehelpers.net/ सबसे आम में से एक है।

मुझे कहना चाहिए कि मुझे कुछ परिदृश्यों में फ़ाइलहेलर्स प्रतिबंधक लगता है, और इसके बजाय द फास्ट सीएसवी रीडर का उपयोग करें । मेरे अनुभव में, यदि आप अपनी CSV फ़ाइल या आयात मानचित्रण के प्रारूप को रनटाइम तक नहीं जानते हैं - यह उपयोग करने के लिए बेहतर लाइब्रेरी है।


हम filehelpers का भी उपयोग करते हैं।
तांगुरेना

1
मैं FileHelpers कॉन्फ़िगर करने के लिए एक उपद्रव पाया है। FastCsvReader का उपयोग करना बहुत आसान था।
जोश क्लोज

FastCsvReader के लिए +1। उत्कृष्ट कार्य - निष्पादन। लेकिन यह मुख्य रूप से एक पाठक / पार्सर है। लेखक नहीं।
मेहदी लामरानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.