2010-07-07 15 views
9

वर्तमान में, मेरे पास है:क्या किसी इकाई को .csv फ़ाइल में कनवर्ट करने का कोई त्वरित तरीका है?

 string outputRow = string.Empty; 
     foreach (var entityObject in entityObjects) 
     { 
      outputRow = entityObject.field1 + "," + entityObject.Field2 etc.... 
     } 

मैं अभी भी इकाई की रूपरेखा के लिए नया हूँ, वहाँ एक तेज तरीका है?

+0

ऐसा लगता है के लिए बेहतर होगा: यहाँ अपने उपयोग के लिए कोड है उत्तर की तरह सभी प्रतिबिंब का उपयोग करें। मैं प्रतिबिंब के बिना ऐसा करने के किसी भी तरीके से उत्सुक होगा? मुझे लगता है कि यह संभव नहीं हो सकता है। –

+0

आप मेरे बहुत हल्के वजन सीमित फ़ाइल लेखक को आजमा सकते हैं: https://gist.github.com/eranbetzalel/5371817#file-delimitedfilewriter-cs –

उत्तर

22

नमूना कोड है कि पूरा कठिन कोड संपत्ति के नाम करने की कोई जरूरत (प्रतिबिंब का उपयोग) के साथ तुम क्या चाहते का एक सरल अभी तक शक्तिशाली तरीका पता चलता है:

/// <summary> 
/// Creates a comma delimeted string of all the objects property values names. 
/// </summary> 
/// <param name="obj">object.</param> 
/// <returns>string.</returns> 
public static string ObjectToCsvData(object obj) 
{ 
    if (obj == null) 
    { 
     throw new ArgumentNullException("obj", "Value can not be null or Nothing!"); 
    } 

    StringBuilder sb = new StringBuilder(); 
    Type t = obj.GetType(); 
    PropertyInfo[] pi = t.GetProperties(); 

    for (int index = 0; index < pi.Length; index++) 
    { 
     sb.Append(pi[index].GetValue(obj, null)); 

     if (index < pi.Length - 1) 
     { 
      sb.Append(","); 
     } 
    } 

    return sb.ToString(); 
} 

अधिक इस पर:

Objects to CSV

How can i convert a list of objects to csv

Are there any CSV readers/writer lib’s in c#

Writing a CSV file in .net

LINQ to CSV : Getting data the way you want

LINQ to CSV library

4

मैं Leniel के सुझाव लिया और एक पूर्ण विशेषताओं "लेखक" है, जो आपको गुण आप लिखा चाहते हैं फिल्टर करने के लिए अनुमति देता है में इसे लपेटा।

public class CsvFileWriter 
{ 
    public static void WriteToFile<T>(string filePath, List<T> objs, string[] propertyNames) 
    { 
     var builder = new StringBuilder(); 
     var propertyInfos = RelevantPropertyInfos<T>(propertyNames); 
     foreach (var obj in objs) 
      builder.AppendLine(CsvDataFor(obj, propertyInfos)); 

     File.WriteAllText(filePath, builder.ToString()); 
    } 

    public static void WriteToFileSingleFieldOneLine<T>(string filePath, List<T> objs, string propertyName) 
    { 
     var builder = new StringBuilder(); 
     var propertyInfos = RelevantPropertyInfos<T>(new[] { propertyName }); 
     for (var i = 0; i < objs.Count; i++) 
     { 
      builder.Append(CsvDataFor(objs[i], propertyInfos)); 

      if (i < objs.Count - 1) 
       builder.Append(","); 
     } 

     File.WriteAllText(filePath, builder.ToString()); 
    } 

    private static List<PropertyInfo> RelevantPropertyInfos<T>(IEnumerable<string> propertyNames) 
    { 
     var propertyInfos = typeof(T).GetProperties().Where(p => propertyNames.Contains(p.Name)).ToDictionary(pi => pi.Name, pi => pi); 
     return (from propertyName in propertyNames where propertyInfos.ContainsKey(propertyName) select propertyInfos[propertyName]).ToList(); 
    } 

    private static string CsvDataFor(object obj, IList<PropertyInfo> propertyInfos) 
    { 
     if (obj == null) 
      return ""; 

     var builder = new StringBuilder(); 

     for (var i = 0; i < propertyInfos.Count; i++) 
     { 
      builder.Append(propertyInfos[i].GetValue(obj, null)); 

      if (i < propertyInfos.Count - 1) 
       builder.Append(","); 
     } 

     return builder.ToString(); 
    } 
} 
0
string csv = ""; 
//get property names from the first object using reflection  
IEnumerable<PropertyInfo> props = entityObjects.First().GetType().GetProperties(); 

//header 
csv += String.Join(", ",props.Select(prop => prop.Name)) + "\r\n"; 

//rows 
foreach(var entityObject in entityObjects) 
{ 
    csv += String.Join(", ", props.Select(
     prop => (prop.GetValue(entityObject, null) ?? "").ToString() 
    )) 
    + "\r\n"; 
} 
  • entitys के बहुत सारे के लिए StringBuilder उपयोग करने के लिए
  • कोड की जाँच नहीं करता जब entityObjects खाली
संबंधित मुद्दे

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