C#的 123,123,"12,123",12,"12,2" 用split怎么分割成 123 123 "12,123" 12 "12,2" 5段 引号里的逗号忽略

解决方案 »

  1.   

    先split "部分,然后再split , 部分
    比较笨的办法
    或者用正则分组,这个比较简单
      

  2.   

    我是要把“.csv”文档导入数据库,字段间以逗号分割,但是数据中的“金额”用逗号分了12,123.00  。正则不怎么会啊!
      

  3.   

    csv本身可以用 OLEDB 数据库引擎读取。这里只是演示下这个算法using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string s = "123,123,\"12,123\",12,\"12,2\"";
                foreach (string item in MySplit(s, ','))
                {
                    Console.WriteLine(item);
                }
                
            }        static IEnumerable<string> MySplit(string source, char splitter)
            { 
                string buffer = string.Empty;
                bool flag = false;
                for (int i = 0; i < source.Length; i++)
                {
                    if (source[i] == (char)34)
                    {
                        flag = !flag;
                    }
                    else
                    {
                        if (source[i] == splitter && !flag)
                        {
                            yield return buffer;
                            buffer = string.Empty;
                        }
                        else
                        {
                            buffer += source[i].ToString();
                        }
                    }
                }
                if (buffer != string.Empty) yield return buffer;
            }
        }
    }
      

  4.   

    我是在PDA上开发的,不知道有没有用,明天试试。谢谢啊!
      

  5.   

    先split "部分,然后再split , 部分
    比较笨的办法
    或者用正则分组,这个比较简单
      

  6.   

    直接给2个分割符号就是了
    http://blog.csdn.net/xianfajushi/article/details/7170572
      

  7.   


                string str = "123,123,\"12,123\",12,\"12,3,2\",3,\"5\"";
                string[] result = Regex.Split(str, @"(?<!""(?:\d+,?)+),");
                foreach (string s in result)
                    Console.WriteLine(s);
    /*
    123
    123
    "12,123"
    12
    "12,3,2"
    3
    "5"*/
      

  8.   

    3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
    3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
    这是两条数据。
      

  9.   

    3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
    3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
    这是两条数据。
    那个好像不行。
      

  10.   

     你这有空格,改下正则            string str = @"3457,台,信息技术,"" 13,000.00 "",AMIN-1105-0537,A0411050537,笔记本,"" 13,000.00 """;
                string[] result = Regex.Split(str, @"(?<!""\s*\d+),");
                foreach (string s in result)
                    Console.WriteLine(s);
    /*
    3457

    信息技术
    " 13,000.00 "
    AMIN-1105-0537
    A0411050537
    笔记本
    " 13,000.00 "
    */
      

  11.   


                string str = @"3457,台,信息技术,"" 13,000.00 "",AMIN-1105-0537,A0411050537,笔记本,"" 13,000.00 ""
    3715,台,信息技术,"" 5,500.00 "",AMIN-1108-0189,A0411080189,平板电脑,"" 5,500.00 """;
                Regex reg = new Regex(@"(?<!""\s*\d+),");
                foreach (string s in str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    foreach (string r in reg.Split(s))
                        Console.WriteLine(r);
                    Console.WriteLine(new string('*', 20));
                }
    /*
    3457

    信息技术
    " 13,000.00 "
    AMIN-1105-0537
    A0411050537
    笔记本
    " 13,000.00 "
    ********************
    3715

    信息技术
    " 5,500.00 "
    AMIN-1108-0189
    A0411080189
    平板电脑
    " 5,500.00 "
    ********************
    */
      

  12.   

    喔 之前写的那个就可以 只是没有考虑到空格 后来看了你帖出来的字符串,还以为就只有一个逗号.
                string str = @"3457,台,信息技术,"" 13,000,00 "",AMIN-1105-0537,A0411050537,笔记本,"" 12,345,333 ""
    3715,台,信息技术,"" 5,500,00 "",AMIN-1108-0189,A0411080189,平板电脑,"" 5,500,00 """;
                Regex reg = new Regex(@"(?<!""\s*(?:\d+,?)+),");
                foreach (string s in str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    foreach (string r in reg.Split(s))
                        Console.WriteLine(r);
                    Console.WriteLine(new string('*', 20));
                }
    /*
    3457

    信息技术
    " 13,000,00 "
    AMIN-1105-0537
    A0411050537
    笔记本
    " 12,345,333 "
    ********************
    3715

    信息技术
    " 5,500,00 "
    AMIN-1108-0189
    A0411080189
    平板电脑
    " 5,500,00 "
    ********************
    */
      

  13.   

    有没有空格我也不清楚,我是直接用记事本打开.csv文件复制的。
      

  14.   

    1.确保""是成对出现
    2.写算法:截取一位放缓冲;遇到"就标记true,再遇到",标记fales.遇到,检查标记,如果true,放入缓冲,否则就是一个数据保存之。