示例#1
0
        //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);
        }
示例#2
0
        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);
        }