对包含逗号、引号的CSV字符串的解析函数

csv文件一般格式为:

A,B,C

1,2,3

4,5,6

但是当文件内存储有逗号、引号,如果只是用split(",")会导致在存在逗号的情况下出错。

如:

A,B,C

1,“2,2",3

4,"""5",6


以下函数输入:

            string ll = @"4,""""""5"",6,""2,3""";//从excel中查看的数据显示 4|"5|6|2,3,保存的字符串为4,"""5",6,"2,3"
            string[] a = CSVstrToAry(ll);

 输出:

           a[0]:4

           a[1]:”5

           a[2]:6

           a[3]:2,3

函数如下:

        private static string[] CSVstrToAry(string strLine)
        {
            string strItem = string.Empty;
            int semicolonFlg = 0;//单数时肯定不是某一列的结束位置
            List<string> lstStr = new List<string>();
            string strA = string.Empty;

            for (int i = 0; i < strLine.Length; i++)
            {
                strA = strLine.Substring(i, 1);

                if (strA == "\"") semicolonFlg += 1;

                if (semicolonFlg == 2) semicolonFlg = 0;

                if (strA == "," && semicolonFlg == 0)
                {
                    if (strItem.Contains("\""))
                    {
                        strItem = strItem.Replace("\"\"", @"""");//CSV中引号也会有转义,单引号会转换为双引号
                        if (strItem.StartsWith("\"")
                            && strItem.EndsWith("\""))
                        {
                            strItem = strItem.Substring(1, strItem.Length - 2);
                        }
                    }
                    
                    lstStr.Add(strItem);
                    strItem = string.Empty;
                }
                else
                {
                    strItem += strA;
                }
            }

            if (strItem.Length > 0)
            {
                if (strItem.Contains("\""))
                {
                    strItem = strItem.Replace("\"\"", @"""");//CSV中引号也会有转义,单引号会转换为双引号
                    if (strItem.StartsWith("\"")
                        && strItem.EndsWith("\""))
                    {
                        strItem = strItem.Substring(1, strItem.Length - 2);
                    }
                }
                lstStr.Add(strItem);
            }

            return lstStr.ToArray();
        }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值