按格式读取csv文件内容

    string path = @"C:Userskeen_DownloadsuploaduploadUpload20140701141934_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 == '
')
                        {
                            if (isInYinHao)
                            {
                                text.Append(current);
                            }
                        }
                        else if (current == '
')
                        {
                            if (isInYinHao)
                            {
                                text.Append(current);
                            }
                            else
                            {
                                SaveResult(results, lineId, text);
                                index = 0;
                                lineId++;
                                continue;
                            }
                        }
                        else if (current == '')
                        {
                        }
                        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);
        }
原文地址:https://www.cnblogs.com/kennyliu/p/3839911.html