2011-01-13 17 views
19

संभव डुप्लिकेट:
Writing a CSV file in .netसी # के लिए अच्छा सीएसवी लेखक?

वहाँ सी # के लिए किसी भी अच्छे सीएसवी लेखकों हैं?

पाठक की आवश्यकता नहीं है, सिर्फ लेखक।

public static class Csv 
{ 
    public static string Escape(string s) 
    { 
     if (s.Contains(QUOTE)) 
      s = s.Replace(QUOTE, ESCAPED_QUOTE); 

     if (s.IndexOfAny(CHARACTERS_THAT_MUST_BE_QUOTED) > -1) 
      s = QUOTE + s + QUOTE; 

     return s; 
    } 

    public static string Unescape(string s) 
    { 
     if (s.StartsWith(QUOTE) && s.EndsWith(QUOTE)) 
     { 
      s = s.Substring(1, s.Length - 2); 

      if (s.Contains(ESCAPED_QUOTE)) 
       s = s.Replace(ESCAPED_QUOTE, QUOTE); 
     } 

     return s; 
    } 


    private const string QUOTE = "\""; 
    private const string ESCAPED_QUOTE = "\"\""; 
    private static char[] CHARACTERS_THAT_MUST_BE_QUOTED = { ',', '"', '\n' }; 
} 

आप यह सुनिश्चित करें कि मान ठीक से उद्धृत कर रहे हैं एस्केप विधि का उपयोग कर सकते हैं:

+3

http://stackoverflow.com/questions/1941392/are-there-any-csv-readers-writer-libs-in-c विशेष रूप से, इस टिप्पणी: http://stackoverflow.com/questions/ 1 9 41392/हैं-वहां-कोई-सीएसवी-पाठक-लेखक-libs-in-c/2094885 # 20 9 4885 – CanSpice

+0

क्षमा करें मेरा बुरा। टिप्पणी हटा दी गई – Simon

उत्तर

45

वहाँ यह करने के लिए काफी नहीं है, वास्तव में ... यहाँ कुछ कोड मैं कई वर्षों के लिए इस्तेमाल किया गया है। मैं एक साधारण पाठक के साथ संयोजन के रूप में इस वर्ग का उपयोग करें, लेकिन आप ने कहा कि आपको लगता है कि जरूरत नहीं है ...

अद्यतन यह आसान है, लेकिन वहाँ string.Join की तुलना में यह अधिक है। हालांकि, अगर आप अभी भी बहुत सरल कुछ के साथ प्राप्त कर सकते हैं, यदि आप values की एक सरणी है (और सी # 3+ उपयोग कर रहे हैं):

string.Join(",", values.Select(Csv.Escape)); 
+0

क्या उद्धरण और सबकुछ से बचना आसान नहीं होगा? या यह फ़ाइल आकार या कुछ संरक्षित करने के लिए है? – mpen

+0

मुझे लगता है कि आप सब कुछ उद्धृत और बच सकते हैं, लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है। – harpo

+0

जब तक मेरा SQL डेटाबेस समझता है कि इसे कैसे आयात किया जाए, यह सब अच्छा है। – mpen

13

लेखन काफी तुच्छ है, लेकिन पुस्तकालयों के लिए अच्छा के लिए बहुत कुछ कर सकते हैं आप। जैसे कस्टम ऑब्जेक्ट्स लिखना।

यहां ऑब्जेक्ट्स लिखने CsvHelper (लाइब्रेरी I बनाए रखने) का एक उदाहरण है।

// Custom object. 
public class MyCustomObject 
{ 
    public string StringProperty { get; set; } 
    public int IntProperty { get; set; } 
} 

// Writing the CSV file. 
var myCustomObjectList = new List<MyCustomObject> 
{ 
    new MyCustomObject { StringProperty = "one", IntProperty = 1 }, 
    new MyCustomObject { StringProperty = "two", IntProperty = 2 } 
}; 
var csv = new CsvHelper(File.OpenWrite("some-file.csv")); 
csv.Writer.WriteRecords(myCustomObjectList); 

डिफ़ॉल्ट रूप से, हेडर लिखने के लिए सम्मेलनों का उपयोग किया जाता है। यह सब विन्यास योग्य है।

// Output: 
StringProperty,IntProperty 
one,1 
two,2 
+0

अच्छी चीजें। खुशी है कि यह आसानी से इंजेक्शन योग्य और मजाकिया भी है। – Ian1971

+0

ग्रेट लाइब्रेरी, एक ऑब्जेक्ट से एक सीएसवी बनाने के लिए इतना आसान बना दिया। आईओ संचालन के लिए हालांकि 'उपयोग' की सिफारिश करेंगे। उपयोग का एक अच्छा उदाहरण [यहां] (https://stackoverflow.com/a/38088636/692942) मिला। – Lankymart

संबंधित मुद्दे