Gaurav_Chaudhary Ответов: 2

Разделенная строка CSV не работает должным образом


У меня есть строка в sData, и я хочу разделить ее на запятую. Данные, содержащие запятую, экранируются знаком\, как запятая записывается как\",\".

"\", \", \"тест, тест\",\"test@test.com\",\ " тестовый дом\",\"Дом 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;\",\"школьный телефон\",\"классный чин\",\"классный чин\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\" \",\"Событие/Время-1\",\ " Событие/Время-2\",\ " Событие/Время-3\",\ " Событие/Время-4\",\ " Событие/Время-5\",\ " событие XC\",\ " другое\",\ " событие\",\ " тренировка\",\"12\",\"Да\","

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]: ""


если я использую этот разделитель
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 строки "" и ""
Пожалуйста, предложите

Что я уже пробовал:

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#

[no name]

Используйте уже существующий CSV-парсер для правильного анализа ваших данных.

2 Ответов

Рейтинг:
2

Gaurav_Chaudhary

Однако это решение регулярных выражений работает для меня. Заменил Сплит с

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*""");


Рейтинг:
1

OriginalGriff

Проблема в том, что вы пытаетесь использовать "неразумную" команду - Split - для чтения "интеллектуальных" данных. Таким образом, он делает именно то, что вы ему говорите, и распределяет ваш ввод везде, где он видит символы, независимо от того, являются ли они "экранированными" или нет.
Вместо того чтобы использовать "тупую" команду, используйте CSV-считыватель, который знает о встроенных кавычках и запятых.
Это хороший, быстрый и гибкий метод: Быстрый читатель CSV[^]


[no name]

Спасибо :-)
Однако это решение регулярных выражений работает для меня.
// string[] sAnser = преобразовать.ToString (sData[i]).Сплит(сепараторы, StringSplitOptions.Нет);
строка[] Сансер = система.Текст.RegularExpressions.Регулярное выражение.Сплит(sData[я].Подстрока(1, sData[я].Длина - 2), @"" " \s*,\s*""");