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

mac2022-06-30  31

 /// <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)