拆分CSV字符串无法正常工作 [英] Split CSV string not working properly
问题描述
我在sData中有一个字符串,我想用逗号分割字符串。包含逗号的数据由\符号转义,就像逗号写为\,\。
\,\,\\ \\test,test \,\test@test.com \,\test home \,\home 2 \,\city \,\ AZ\,\ 160047\,\ 9988345631\,\ 9988345631\,\ 2911\,\ 10/02 / 2016\,\\ \\男性,\sspar \,\\NCAA \,\\是,\\,\AAAAAAAAAAA \,\Valdez高中; Po Box 398 ;;; Valdez; AK; 99686 0398; USA; 020150; \,\school phone \,\Class Rank \,\Class Rank\ \ 1\,\ 2\,\ 3\,\ 4\,\ 5\,\ 6\,\\ \\7 \,\8 \,\9 \,\\,\Event / Time-1 \,\活动/时间-2 \,\Event / Time-3 \,\Event / Time-4 \,\Event / Time-5 \,\Event XC \,\\ \\其他\,\\ Event\,\Workout \,\12 \,\Yes \,
I have a string in sData and i want to split the string by comma. The data containing comma is escaped by \ sign like a comma is written as \",\".
"\",\",\"test,test\",\"test@test.com\",\"test home\",\"home 2\",\"city\",\"AZ\",\"160047\",\"9988345631\",\"9988345631\",\"2911\",\"10/02/2016\",\"Male\",\"sspar\",\"NCAA\",\"Yes\",\" \",\"AAAAAAAAAAA\",\"Valdez High School;Po Box 398;;;Valdez;AK;99686 0398;USA;020150;\",\"school phone\",\"Class Rank\",\"Class Rank\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\" \",\"Event/Time-1\",\"Event/Time-2\",\"Event/Time-3\",\"Event/Time-4\",\"Event/Time-5\",\"Event XC\",\"OTHER\",\"Event\",\"Workout\",\"12\",\"Yes\","
Convert.ToString(sData).Split(',')
[0]: "\""
[1]: "\""
[2]: "\"test"
[3]: "test\""
[4]: "\"test@test.com\""
[5]: "\"test home\""
[6]: "\"home 2\""
[7]: "\"city\""
[8]: "\"AZ\""
[9]: "\"160047\""
[10]: "\"9988345631\""
[11]: "\"9988345631\""
[12]: "\"2911\""
[13]: "\"10/02/2016\""
[14]: "\"Male\""
[15]: "\"sspar\""
[16]: "\"NCAA\""
[17]: "\"Yes\""
[18]: "\" \""
[19]: "\"AAAAAAAAAAA\""
[20]: "\"Valdez High School;Po Box 398;;;Valdez;AK;99686 0398;USA;020150;\""
[21]: "\"school phone\""
[22]: "\"Class Rank\""
[23]: "\"Class Rank\""
[24]: "\"1\""
[25]: "\"2\""
[26]: "\"3\""
[27]: "\"4\""
[28]: "\"5\""
[29]: "\"6\""
[30]: "\"7\""
[31]: "\"8\""
[32]: "\"9\""
[33]: "\" \""
[34]: "\"Event/Time-1\""
[35]: "\"Event/Time-2\""
[36]: "\"Event/Time-3\""
[37]: "\"Event/Time-4\""
[38]: "\"Event/Time-5\""
[39]: "\"Event XC\""
[40]: "\"OTHER\""
[41]: "\"Event\""
[42]: "\"Workout\""
[43]: "\"12\""
[44]: "\"Yes\""
[45]: ""
如果我使用这个分隔符
if i use this separator
string[] seprator = { "\"," };
Convert.ToString(sData[i]).Split(seprator,StringSplitOptions.None)
{string[45]}
[0]: ""
[1]: ""
[2]: "\"test,test"
[3]: "\"test@test.com"
[4]: "\"test home"
[5]: "\"home 2"
[6]: "\"city"
[7]: "\"AZ"
[8]: "\"160047"
[9]: "\"9988345631"
[10]: "\"9988345631"
[11]: "\"2911"
[12]: "\"10/02/2016"
[13]: "\"Male"
[14]: "\"sspar"
[15]: "\"NCAA"
[16]: "\"Yes"
[17]: "\" "
[18]: "\"AAAAAAAAAAA"
[19]: "\"Valdez High School;Po Box 398;;;Valdez;AK;99686 0398;USA;020150;"
[20]: "\"school phone"
[21]: "\"Class Rank"
[22]: "\"Class Rank"
[23]: "\"1"
[24]: "\"2"
[25]: "\"3"
[26]: "\"4"
[27]: "\"5"
[28]: "\"6"
[29]: "\"7"
[30]: "\"8"
[31]: "\"9"
[32]: "\" "
[33]: "\"Event/Time-1"
[34]: "\"Event/Time-2"
[35]: "\"Event/Time-3"
[36]: "\"Event/Time-4"
[37]: "\"Event/Time-5"
[38]: "\"Event XC"
[39]: "\"OTHER"
[40]: "\"Event"
[41]: "\"Workout"
[42]: "\"12"
[43]: "\"Yes"
[44]: ""
仍然无法正常工作。它将第一个答案分成2个字符串和
请建议
我尝试过:
Still not working properly.Its splitting first answer into 2 strings "" and ""
Please suggest
What I have tried:
I have a string in sData and i want o split the string by comma. The data containing comma is escaped by \ sign like a comma is written as \",\".
在C#中尝试拆分功能
tried Split function in C#
推荐答案
问题是你正在尝试使用 unintelligent命令 - 拆分 - 读取智能数据。所以它完全按照你所说的去做,并在你看到角色的任何地方splist你的输入,无论它们是否被转义。
而不是使用哑命令,使用CSV阅读器它知道嵌入式引号和逗号。
这是一个好的,快速的,灵活的:快速CSV阅读器 [ ^ ]
The problem is that you are trying to use an "unintelligent" command - Split - to read "intelligent" data. So it does exactly what you tell it to, and splist your input everywhere it sees the characters, whether they are "escaped" or not.
Instead of using a "dumb" command, use a CSV reader which knows about embedded quotes and commas.
This is a good, fast, and flexible one: A Fast CSV Reader[^]
这个正则表达式解决方案适用于我。用
This Regex solution works for me though. Replaced Split with
Regex.Split
// string[] sAnser = Convert.ToString(sData[i]).Split(seprator, StringSplitOptions.None);
string[] sAnser = System.Text.RegularExpressions.Regex.Split(sData[i].Substring(1, sData[i].Length - 2), @"""\s*,\s*""");
这篇关于拆分CSV字符串无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!