C# split问题~

syh0514 2012-04-17 09:12:01
C#的 123,123,"12,123",12,"12,2" 用split怎么分割成 123 123 "12,123" 12 "12,2" 5段 引号里的逗号忽略
...全文
312 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿领巾童鞋 2012-04-18
  • 打赏
  • 举报
回复
1.确保""是成对出现
2.写算法:截取一位放缓冲;遇到"就标记true,再遇到",标记fales.遇到,检查标记,如果true,放入缓冲,否则就是一个数据保存之。
syh0514 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
引用 17 楼 的回复:
引用 13 楼 的回复:
引用 11 楼 的回复:
引用 9 楼 的回复:
呵呵,认真看一下还不行呢,不能更换分割符号?

3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A041108……
[/Quote]
有没有空格我也不清楚,我是直接用记事本打开.csv文件复制的。
huangwenquan123 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 13 楼 的回复:
引用 11 楼 的回复:
引用 9 楼 的回复:
呵呵,认真看一下还不行呢,不能更换分割符号?

3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,……
[/Quote]
喔 之前写的那个就可以 只是没有考虑到空格 后来看了你帖出来的字符串,还以为就只有一个逗号.
            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 "
********************
*/
syh0514 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 11 楼 的回复:
引用 9 楼 的回复:
呵呵,认真看一下还不行呢,不能更换分割符号?

3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
这是两条……
[/Quote]
太厉害了!!膜拜!可以了。但是还有问题,当我数据里引号下有多个逗号时就不行了。如:"12,345,333"。麻烦看看,拜托!
cjh200102 2012-04-18
  • 打赏
  • 举报
回复
楼上不错
orochiheart 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
csv本身可以用 OLEDB 数据库引擎读取。

这里只是演示下这个算法


C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
……
[/Quote]
+1 学习!
huangwenquan123 2012-04-18
  • 打赏
  • 举报
回复

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 "
********************
*/
huangwenquan123 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:
呵呵,认真看一下还不行呢,不能更换分割符号?

3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
这是两条数据。
[/Quote] 你这有空格,改下正则

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 "
*/
syh0514 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
C# code

string str = "123,123,\"12,123\",12,\"12,3,2\",3,\"5\"";
string[] result = Regex.Split(str, @"(?<!""(?:\d+,?)+),");
foreach (string s in result)
……
[/Quote]
3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
这是两条数据。
那个好像不行。
syh0514 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
呵呵,认真看一下还不行呢,不能更换分割符号?
[/Quote]
3457,台,信息技术," 13,000.00 ",AMIN-1105-0537,A0411050537,笔记本," 13,000.00 "
3715,台,信息技术," 5,500.00 ",AMIN-1108-0189,A0411080189,平板电脑," 5,500.00 "
这是两条数据。
huangwenquan123 2012-04-17
  • 打赏
  • 举报
回复

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"

*/
  • 打赏
  • 举报
回复
呵呵,认真看一下还不行呢,不能更换分割符号?
  • 打赏
  • 举报
回复
直接给2个分割符号就是了
http://blog.csdn.net/xianfajushi/article/details/7170572
anzhiqiang_touzi 2012-04-17
  • 打赏
  • 举报
回复
先split "部分,然后再split , 部分。。。
比较笨的办法。。。
或者用正则分组,这个比较简单
syh0514 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

csv本身可以用 OLEDB 数据库引擎读取。

这里只是演示下这个算法

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
……
[/Quote]
我是在PDA上开发的,不知道有没有用,明天试试。谢谢啊!
threenewbee 2012-04-17
  • 打赏
  • 举报
回复
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;
}
}
}
syh0514 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

先split "部分,然后再split , 部分。。。
比较笨的办法。。。
或者用正则分组,这个比较简单
[/Quote]
我是要把“.csv”文档导入数据库,字段间以逗号分割,但是数据中的“金额”用逗号分了12,123.00 。正则不怎么会啊!
orochiheart 2012-04-17
  • 打赏
  • 举报
回复
这个应该用正则能解决 坐等正则高手...
game159743 2012-04-17
  • 打赏
  • 举报
回复
入门者路过。。。忽略""啊 不会 分隔,就会
郗C 2012-04-17
  • 打赏
  • 举报
回复
先split "部分,然后再split , 部分。。。
比较笨的办法。。。
或者用正则分组,这个比较简单

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧