gpt4 book ai didi

c# - Linq 拆分函数查询

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:29 25 4
gpt4 key购买 nike

我有一个包含以下记录的 csv 文件:

Col1,Col2,Col3

"Test,Test1",1,3

我在下面使用 Linq 查询将 csv 拆分为 XML 文档。但是,对于上面给出的示例,它将“Test,Test1”拆分为两个单独的元素。

var xml = new XElement("Root", source.Select(x => 
new XElement("Testing", x.Split(splitChar).Select((Field, index) =>
new XElement("Field" + index, Field)))).Skip(1));

这会生成如下内容:

<Root>
<Testing Field0="Test" Field01="Test1" Field02="1" Field03="3" />

</Root>

但我想要的是:

<Root>
<Testing Field0="Test,Test1" Field01="1" Field02="3" />

</Root>

谁能帮我实现以上目标?

最佳答案

取而代之的是:

x.Split(splitChar)

使用正则表达式试试这个方法:

Regex.Matches(x, "\"[^\"]*\"|[^,]+").Cast<Match>().Select(m => m.Value)

这匹配一个被引用的字段,例如:"foobar,baz" 不包含逗号的字段。

我的回答有一些局限性:

  • 处理字符串中的转义引号,例如在本例中:"Test1,Test\"two\",Test3",0,1。你需要这个吗?
  • 分隔符不再是参数,而是硬编码的。您必须小心,因为某些字符很特殊,需要在正则表达式中进行转义。如果您想根据 splitChar 的运行时值构建正则表达式,请考虑使用 Regex.Escape

关于c# - Linq 拆分函数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com