string path = @"C:\Users\keen_\Downloads\upload\upload\Upload\20140701141934_export.csv"; ImportDataTable(path); //2014-07-01 //get csv file to datatable private static DataTable ImportDataTable(string filepath) { DataTable mydt = new DataTable("myTableName"); mydt.Columns.Add("Data ID", System.Type.GetType("System.String")); mydt.Columns.Add("Field Name", System.Type.GetType("System.String")); mydt.Columns.Add("New Value", System.Type.GetType("System.String")); DataRow mydr; using (System.IO.StreamReader mysr = new System.IO.StreamReader(filepath)) { int data; char current; StringBuilder text = new StringBuilder(); IDictionary<int, List<string>> results = new Dictionary<int, List<string>>(); bool isInYinHao = false; ; int lineId = 1; int index = 0; while (true) { data = mysr.Read(); if (data != -1) { current = (char)data; if (current == ‘"‘) { if (isInYinHao) { isInYinHao = false; } else { if (index > 0) { text.Append(current); } isInYinHao = true; } } else if (current == ‘,‘) { if (isInYinHao) { text.Append(current); } else { SaveResult(results, lineId, text); index = 0; continue; } } else if (current == ‘\r‘) { if (isInYinHao) { text.Append(current); } } else if (current == ‘\n‘) { if (isInYinHao) { text.Append(current); } else { SaveResult(results, lineId, text); index = 0; lineId++; continue; } } else if (current == ‘\0‘) { } else { text.Append(current); } index++; } else { //Read to file end. SaveResult(results, lineId, text); break; } } foreach (int id in results.Keys) { mydr = mydt.NewRow(); for (int i = 0; i < results[id].Count; i++) { if (i > 2) { break; } mydr[i] = results[id][i]; } mydt.Rows.Add(mydr); } } return mydt; } private static void SaveResult(IDictionary<int, List<string>> results, int lineId, StringBuilder text) { if (!results.ContainsKey(lineId)) { results.Add(lineId, new List<string>()); } results[lineId].Add(text.ToString()); text.Remove(0, text.Length); }
原文:http://www.cnblogs.com/kennyliu/p/3839911.html