//public static DataTable GetDataTable(string path) //{ // return GetDataTable(path,",", Encoding.Default); //} public static DataTable GetDataTable(string path, string delimiter, Encoding encoding) { if (path.GetIsOleDb()) { } DataTable dt = new DataTable(); dt.Locale = CultureInfo.InvariantCulture; using (StreamReader sr = new StreamReader(path, encoding)) { string firstLine = sr.ReadLine(); string[] titles = CsvContext.GetFields(firstLine, delimiter); for (int i = 0; i < titles.Length; i++) { dt.Columns.Add(titles[i]); } while (!sr.EndOfStream) { string line = sr.ReadLine(); string[] fields = CsvContext.GetFields(line, delimiter); DataRow dr = dt.NewRow(); for (int i = 0; i < fields.Length && i < dt.Columns.Count; i++) { dr[i] = fields[i]; } dt.Rows.Add(dr); } } return(dt); }
public static T ReadLine <T>(string line, string[] titles, CsvConfig config) where T : new() { string[] fields = CsvContext.GetFields(line, config.Delimiter); T result = new T(); Type t = typeof(T); List <PropertyInfo> pis = t.GetProperties().ToList(); for (int i = 0; i < fields.Length; i++) { PropertyInfo pi = null; if (config.MappingType == CsvMappingType.Title) { pi = GetPropertyInfo(pis, i, titles[i], config); } if (config.MappingType == CsvMappingType.Order) { pi = GetPropertyInfo(pis, i); } if (pi != null) { pi.SetValue(result, fields[i]); } } foreach (PropertyInfo pi in pis) { //If the property is adorned with CsvOriginalFieldsAttribute, set the value to fields if (pi.IsDefined(typeof(CsvOriginalFieldsAttribute), true)) { pi.SetValue(result, fields, null); } } return(result); }