Разбор строки в массив (VB) - PullRequest
       48

Разбор строки в массив (VB)

0 голосов
/ 27 сентября 2018

Я попытался создать программу, которая будет анализировать необработанный список из Chrome: // policy (введенный RichTextbox) в текстовый массив, а затем выгружать его в другой RichTextbox.Все необработанные строки имеют длину ровно 32 символа, за которыми следует запятая.Вот код:

Public Class Form1
    Dim tempExt As String
    Dim extsHandled As Integer
    Dim numOfExts As Integer
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If RichTextBox1.Text = "" Then
            MsgBox("Please enter the raw extensions from Chrome://policy")
        Else
            RichTextBox3.Text = RichTextBox1.Text
            numOfExts = TextBox1.Text
            Dim place As Integer = 0
            Dim exts(150) As String
            While extsHandled < numOfExts
                tempExt = RichTextBox1.Text.Substring(0, 32)
                exts(place) = tempExt
                RichTextBox1.Text.Remove(0, 33)
                place = place + 1
                extsHandled = extsHandled + 1
            End While
            Dim newPlace As Integer = 0
            While newPlace < numOfExts
                RichTextBox2.AppendText(exts(newPlace))
                newPlace = newPlace + 1
                RichTextBox2.AppendText(" ")
            End While

        End If
    End Sub
End Class

Большинство из них работает, но может показаться, что что-то не так с удалением символов из richtextbox, так как, когда я его запускаю, он анализирует только первую часть строкиснова и снова:

enter image description here

Я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если это всегда так, вы можете сделать это так:

RichTextBox3.Text = RichTextBox1.Text.Replace(",", vbNewLine)

№ 3 - это ваш результат, в то время как № 1 оригинален, верно?

enter image description here

Ах да, вы можете посчитать, сколько их там просто по

RichTextBox2.Text=  RichTextBox1.Text.Split({","}, StringSplitOptions.RemoveEmptyEntries).Count.ToString
0 голосов
/ 27 сентября 2018

Эта строка возвращает новую строку:

RichTextBox1.Text.Remove(0, 33)

Она не изменяет текстовое поле на месте.На следующей итерации цикла вы продолжаете работать с исходным значением, просматривая тот же набор из 32 символов в начале строки.

Кроме того, в этом коде ничего не инициализирует переменную extsHandled,Вы должны включить Option Strict, что поможет отловить такую ​​ошибку.Запуск Option Strict off - плохая практика.Вы также должны дать значимое имя любому элементу управления, на который вы фактически будете ссылаться из кода.

Мне сейчас не совсем понятен точный формат.Если это все в одной строке (без символов разрыва строки как части строки, даже если она переносится), это должно работать:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If String.IsNullOrWhitespace(RichTextBox1.Text) Then
        MsgBox("Please enter the raw extensions from Chrome://policy")
        Exit Sub
    End If

    RichTextBox3.Text = RichTextBox1.Text
    Dim exts() As String
    Using rdr As New TextFieldParser(RichTextBox1.Text)
        rdr.TextFieldType = FileIO.FieldType.Delimited
        rdr.Delimiters = New String() {","}
        exts = rdr.ReadFields()
    End Using

    For Each ext As String In exts
         RichTextBox2.AppendText(ext)
    Next ext

    RichTextBox1.Text = ""
End Sub

Проблема в том, что этот код ничего не делает.Массив исчезает, когда метод заканчивается.Подумайте о том, чтобы сделать массив свойством класса или иметь метод, который возвращает массив в качестве результата.

Вы также можете посмотреть на это, чтобы сохранить ввод в текстовое поле, хотя это всего лишь отправная точка:

Public Function GetChromeExtensionKeys() As IEnumerable(Of String)
    Dim BasePath As String = 
EndEnvironment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
    BasePath = Path.Combine(BasePath, "Google\Chrome\User Data")

    Dim dflt As String = Path.Combine(BasePath, "Default\Extensions")
    Dim profileExts() As String = Directory.GetDirectories(BasePath, "Profile *").
          Select(Function(p) Path.Combine(p, "Extensions"))

    Dim result As New List(Of String)()
    result.AddRange(Directory.GetDirectories(dflt))
    For Each folder As String In profiles
        result.AddRange(Directory.GetDirectories(folder))
    Next folder   

    Return result.Select(Function(e) Path.GetFileName(e)).Distinct()
Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each ext As String In GetChromeExtensionKeys()
         RichTextBox2.AppendText(ext)
    Next ext
End Sub
...