正确解析以逗号分割的CSV文件

 /// <summary>
   /// 解析/// </summary>
   /// <param name="Source">csv字符串</param>
   /// <returns></returns>
   public ArrayList SplitCSV(string csvStr)
   {
   //获取联系人记录内容
   #region
   int sp = csvStr.IndexOf("/r/n");
   string head = csvStr.Substring(0, sp - 1);
   string record = csvStr.Substring(sp + 2);
   #endregion
   char[] s = record.ToCharArray();
   System.Text.StringBuilder strCol = new System.Text.StringBuilder();
   ArrayList arLne = new ArrayList();
   ArrayList arAll = new ArrayList();
   int cnter = 0; //双引号计数器
   for ( int i = 0 ; i < s.Length ; i++)
   {
   if ( s[i] == '/"') //遇到双引号(字段结束符)
   {
   cnter++; //计数器加一
   strCol.Append(s[i]); //此引号加入当前列
   }
   else if ( s[i] == ',') //遇到逗号(列结束符)
   {
   if (IsColumeOver(cnter)) //此逗号是列结束符,计数器清零,将当前列加入当前行
   {
   cnter = 0;
   arLne.Add(strCol);
   strCol = new System.Text.StringBuilder();
   }
   else //此逗号不是列结束符,逗号加入当前列
   {
   strCol.Append(s[i]);
   }
   }
   else if (s[i] == '/r') //遇到回车(行结束符)
   {
   if (IsLineOver(cnter)) //此回车是行结束符,计数器清零,将当前行加入结果数组
   {
   cnter = 0;
   arAll .Add(arLne);
   arLne = new ArrayList();
   }
   else //此回车不是行结束符,/r回车符加入当前列
   {
   strCol.Append(s[i]);
   }
   }
   else //正常数据(非字段、列、行结束符)
   {
   strCol.Append(s[i]);
   }
   }
   return arAll ;
   }
   /// <summary>
   /// 当前列是否已读完
   /// </summary>
   /// <param name="cnter"></param>
   /// <returns></returns>
   private bool IsColumeOver(double cnter)
   {
   return System.Math.IEEERemainder((double)cnter,2) == 0;
   }
   /// <summary>
   /// 当前行是否已读完
   /// </summary>
   /// <param name="cnter"></param>
   /// <returns></returns>
   private bool IsLineOver(double cnter)
   {
   return System.Math.IEEERemainder((double)cnter,2) == 0;
   }(王朝网络 wangchao.net.cn)

转载于:https://www.cnblogs.com/deepwishly/archive/2011/03/21/2551166.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值