在CSV文件导入到数据库时使用过的代码

本文介绍了两种CSV文件的读取方法:一种适用于普通CSV文件,能够处理带标题行的情况;另一种针对无回车符的CSV文件,通过正则表达式解析内容。这两种方法均使用C#实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#region  简单CSV文件读取方式(无特殊情况的CSV文件)

        public static DataTable ImportCSV(string filePath)
        {
            DataTable dt = new DataTable();

            int lsi = 0;
            char cv = '\r';
            bool HeadYes = true;//第一行是否为标题  
            StreamReader fileReader = new StreamReader(filePath, Encoding.Default);
            while (fileReader.EndOfStream == false)
            {
                string line = fileReader.ReadLine();
                string[] y = line.Split(cv);
                //第一行为标题行  
                if (HeadYes == true)
                {
                    //第一行  
                    if (lsi == 0)
                    {
                        for (int i = 0; i < y.Length; i++)
                        {
                            dt.Columns.Add(y[i].Trim().ToString());
                        }
                        lsi++;
                    }
                    //从第二列开始为数据列  
                    else
                    {
                        DataRow dr = dt.NewRow();
                        for (int i = 0; i < y.Length; i++)
                        {
                            dr[i] = y[i].Trim();
                        }
                        dt.Rows.Add(dr);
                    }
                }
                //第一行不为标题行  
                else
                {
                    if (lsi == 0)
                    {
                        for (int i = 0; i < y.Length; i++)
                        {
                            dt.Columns.Add(i.ToString());
                        }
                        lsi++;
                    }

                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < y.Length; i++)
                    {
                        dr[i] = y[i].Trim();
                    }
                    dt.Rows.Add(dr);
                }
            }
            return dt;
        }
        #endregion


        #region 无回车符的CSV文件读取方式
        public void GetCsv(string filePath)
        {
            string s = string.Empty;
            string src = string.Empty;
            SortedList sl = new SortedList();
            StreamReader fs = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read), Encoding.Default);
            while (!string.IsNullOrEmpty(s = fs.ReadLine()))
            {
                if (!string.IsNullOrEmpty(s))
                {
                    src = s.Replace("\"\"", "'");
                    MatchCollection col = Regex.Matches(src, ",\"([^\"]+)\",", RegexOptions.ExplicitCapture);
                    IEnumerator ie = col.GetEnumerator();
                    while (ie.MoveNext())
                    {
                        string patn = ie.Current.ToString();
                        int key = src.Substring(0, src.IndexOf(patn)).Split(',').Length;
                        if (!sl.ContainsKey(key))
                        {
                            sl.Add(key, patn.Trim(new char[] { ',', '"' }).Replace("'", "\""));
                            src = src.Replace(patn, ",,");
                        }
                    }

                    string[] arr = src.Split(',');
                    for (int i = 0; i < arr.Length; i++)
                    {
                        if (!sl.ContainsKey(i))
                            sl.Add(i, arr[i]);
                    }
                    IDictionaryEnumerator ienum = sl.GetEnumerator();
                    while (ienum.MoveNext())
                    {
                        var strKey = ienum.Key;
                        var strValue = ienum.Value.ToString().Replace("'", "\"");
                    }
                    sl.Clear();
                    src = string.Empty;
                }
            }
            fs.Close();
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值