zoukankan      html  css  js  c++  java
  • 正确解析以逗号分割的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;
      }

  • 相关阅读:
    Canvas 五角星绘制
    Bob Waters
    自定义样式,使用浏览器阅读epub格式的电子书
    FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)
    【转载】什么样的妻子什么样的人生
    win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)
    这世上,没有完美的父母,也没有完美的孩子
    考研数学复习建议与资料
    eclipse中修改jsp文件中内容,但是刷新网页内容却不变问题
    JavaScript基础2
  • 原文地址:https://www.cnblogs.com/zhuor/p/282810.html
Copyright © 2011-2022 走看看