Split CSV String - PullRequest
       7

Split CSV String

3 голосов
/ 06 июня 2009

Как бы я разбил следующую строку?

test, 7535, '1,830,000', '5,000,000'

Результат должен быть

test
7535
'1,830,000'
'5,000,000'

Я пытаюсь:

Dim S() as string = mystring.split(",")

Но я получаю,

test
7535
'1
830
000'
'5
000
000'

Спасибо

Ответы [ 4 ]

8 голосов
/ 06 июня 2009

Не анализируйте CSV вручную, если у вас есть удобные доступные библиотеки хорошего качества . Пожалуйста!

Синтаксический анализ CSV имеет много потенциальных ловушек, и эта библиотека, согласно моим тестам, решает большинство из них аккуратно.

Тем не менее, если это одноразовая задача и строки всегда похожи на ваш пример, вы можете использовать регулярное выражение, например так (синтаксис VB.NET может быть неправильным, пожалуйста, исправьте):

        Dim s as string = "1, 2, '1,233,333', '8,444,555'";
        Dim r as Regex = new Regex(",\s");
        Dim re() as string = r.Split(s);

Это рассчитывает на то, что после разделяющей запятой всегда есть пробел и что в числах между запятыми нет пробела. Если это не всегда так, вы можете:

  • Сделайте регулярное выражение более сложным (посмотрите здесь , чтобы увидеть, как грязные вещи могут возникнуть)
  • Пользуйтесь библиотекой и будьте счастливее
2 голосов
/ 27 июня 2011

Если только для этого примера не нужно использовать регулярное выражение, функция Split (член Microsoft.VisualBasic.Strings) может принимать строку в качестве разделителя, поэтому просто введите ",", чтобы перехватить только те запятые с пробелом после:

    Dim s As String = "1, 2, '1,233,333', '8,444,555'"
    Dim r() As String = Split(s, ", ")
1 голос
/ 06 июня 2009
Dim words as New List(Of String)()
Dim inQuotes as Boolean
Dim thisWord as String
For Each c as Char in String
    If c = "'"c Then inQuotes = Not inQuotes
    If c = ","c AndAlso Not inQuotes Then
        words.Add(thisWord)
        thisWord = Nothing
    Else
        thisWord &= c
    End If
Next
0 голосов
/ 06 июня 2009

Попробуйте использовать этот RegExp: "('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...