2011-01-13 17 views
19

Olası Çoğalt:
Writing a CSV file in .net
C# için İyi CSV Yazarı?

C# için herhangi bir iyi bir CSV yazarlar var mı?

Okuyucuya gerek yok, sadece yazara.

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' }; 
} 

Sen değerleri düzgün cinsindendir sağlamak için Escape yöntemi kullanabilirsiniz: Bunun için çok fazla bir şey yok

+3

http://stackoverflow.com/questions/1941392/are-there-any-csv-readers-writer-libs-in-c özellikle bu açıklama: http://stackoverflow.com/questions/ 1941392/var-herhangi-csv-okuyucular-yazar-lib-in-c/2094885 # 2094885 – CanSpice

+0

üzgünüm kötü benim. comment silindi – Simon

cevap

45

, gerçekten ... burada birkaç yıldır kullandım bazı kod. Ben basit bir okuyucu ile birlikte bu sınıf kullanır, ancak bunu gerek yok ... Çok basit

Güncelleme söyledi ama string.Join daha fazlası var olduğunu. Ancak, values bir dizi var (ve C# 3+ kullanıyorsanız) ise yine oldukça basit bir şey yok alabilirsiniz:

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

Teklif vermek ve her şeyden kaçmak daha kolay olmaz mıydı? Yoksa dosya boyutunu veya başka bir şeyi korumak mı? – mpen

+0

Herşeyi alıntılayabilir ve kaçabilirsin, sanırım, ama çok zarif değil. – harpo

+0

SQL veritabanımın nasıl içe aktarılacağını anladığım kadarıyla, her şey yolunda. – mpen

13

Yazma oldukça önemsiz olduğunu, ancak kütüphaneler için güzel bir çok şey yapabilirsiniz sen. Özel nesneler yazmak gibi.

Burada, CsvHelper (sürdürdüğüm bir kitaplık) yazma nesneleri örneği verilmiştir.

// 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); 

Varsayılan olarak, başlıkların yazılması için kurallar kullanılır. Bu hepsi yapılandırılabilir.

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

İyi şeyler. Çok kolay enjekte edilebilir ve alay edilebilir. – Ian1971

+0

Harika bir kütüphane, bir nesneden çok basit bir csv oluşturdu. IO işlemleri için olsa '' yi kullanmanızı öneririm. Kullanımın iyi bir örneği [burada] bulundu (https://stackoverflow.com/a/38088636/692942). – Lankymart