拆分CSV字符串无法正常工作 [英] Split CSV string not working properly

查看:62
本文介绍了拆分CSV字符串无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆