Сплит строковый массив проблем vb.net - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в VB.NET и хотел бы разбить строку на массив.

У меня есть строка вроде:

613,710,200,127,127, '{\ "js \": {\" \ ": \" 16 \», \ "43451 \": \ "16 \", \ "65815 \": \ "16 \", \ "43452 \": \ "16 \",\ "41147 \": \ "16 \", \ "43449 \": \ "16 \", \ "43467 \": \ "16 \", \ "1249 \": \ "16 \", \»43462 \ ": \" 16 \», \ "43468 \": \ "48 \", \ "43438 \": \ "64 \", \ "43439 \": \ "80 \"}} ''rca ', 95,2048000,3,1,' AABBCCDDEEFFGGHHIIJJKKLL = ',' xx.xx.xx.xx ', NULL

Я хочу разбить это на массив в ",".

Я пытался:

Dim variable() As String
Dim stext As String

stext = "mystringhere"
variable = Split(stext, ",")

Моя проблема связана с

'{\ "js \": {\ "\": \ "16 \», \ "43451 \": \ "16 \", \ "65815 \": \ "16 \", \ "43452 \": \ "16 \", \ "41147 \": \ "16 \",\ "43449 \": \ "16 \", \ "43467 \": \ "16 \", \ "1249 \": \ "16 \", \ "43462 \": \ "16 \", \»43468 \ ": \" 48 \ ", \" 43438 \ ": \" 64 \ ", \" 43439 \ ": \" 80 \ "}} ',

тоже разделено.Я хочу, чтобы все это было в переменной (5).Это возможно?

спасибо за помощь

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Вам нужен анализатор CSV, в котором вы можете установить символ кавычки поля.К сожалению, TexFieldParser , который поставляется с VB.NET, не имеет такой возможности.К счастью, другие делают - здесь я использовал LumenWorksCsvReader , который доступен как пакет NuGet *.

Option Strict On
Option Infer On

Imports System.IO
Imports LumenWorks.Framework.IO.Csv

Module Module1

    Sub Main()
        Dim s = "613,710,200,127,127,'{\""js\"":{\""\"":\""16\"",\""43451\"":\""16\"",\""65815\"":\""16\"",\""43452\"":\""16\"",\""41147\"":\""16\"",\""43449\"":\""16\"",\""43467\"":\""16\"",\""1249\"":\""16\"",\""43462\"":\""16\"",\""43468\"":\""48\"",\""43438\"":\""64\"",\""43439\"":\""80\""}}','rca',95,2048000,3,1,'AABBCCDDEEFFGGHHIIJJKKLL=','xx.xx.xx.xx',NULL"

        Using sr As New StringReader(s)
            Using csvReader = New CsvReader(sr, delimiter:=","c, quote:="'"c, escape:="\"c, hasHeaders:=False)

                Dim nFields = csvReader.FieldCount

                While csvReader.ReadNextRecord()
                    For i = 0 To nFields - 1
                        Console.WriteLine(csvReader(i))
                    Next
                End While

            End Using
        End Using

        Console.ReadLine()


    End Sub

End Module

, который выводит

613  
710  
200  
127  
127  
{"js":{"":"16","43451":"16","65815":"16","43452":"16","41147":"16","43449":"16","43467":"16","1249":"16","43462":"16","43468":"48","43438":"64","43439":"80"}}  
rca  
95  
2048000  
3  
1  
AABBCCDDEEFFGGHHIIJJKKLL=  
xx.xx.xx.xx  
NULL

Обратите внимание, чтодвойные кавычки удваиваются в литеральной строке, так как это способ ввести одну двойную кавычку в VB.

Если вы действительно хотите, чтобы обратные слэши сохранялись, удалите параметр escape:="\"c.

Если вы читаете из файла, тогда вместо StringReader используйте соответствующий StreamReader .


* Инструменты -> Диспетчер пакетов NuGet -> Управление пакетами NuGet для решения... Выберите вкладку «Обзор» -> введите LumenWorksCsvReader -> выберите вкладку Себастьян Лорион и др., -> отметьте название своего проекта на панели справа -> нажмите «Установить».

0 голосов
/ 22 сентября 2019

Я новичок в VB.NET и хотел бы разбить строку на массив.... variable = Split (stext, ",")

Вместо

variable = Split(stext,",")

используйте

variable = stext.split(",")

Если вы хотите получить немногоболее сложным в вашем разделении вы бы создали массив данных char как таковой

dim data(3) as char
data(0) = ","c
data(1) = vbcrlf
data(2) = chr(34)
data(3) = vbtab
... and so on
variable = stext.split(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...