[VB.NET] Eingabe in Array umwandeln

Hallo,

wie kann ich eine Eingabe in ein Array umwandeln? Oder kann ich einfach mit txtEingabe(1) auf das 2. Zeichen der Eingabe zugreifen? In der Klasse System.Convert gibt es kein ToArray.
 
Du kannst mit der String-Methode Chars() auf jedes einzelne Zeichen zugreifen.

Code:
Dim sTest as String = "foobar"
Dim cCurrent as Char
cCurrent = sTest.Chars(3)

Da der Index bei 0 beginnt, würde cCurrent im obigen Beispiel also den Buchstaben "b" enthalten.
Mit einer For-Next-Schleife kannst du so jeden beliebigen String in ein Char-Array umschaufeln.

Alternativ gibt es noch die ToCharArray()-Methode.
 
Zuletzt bearbeitet von einem Moderator:
Jetzt bekomme ich folgende Fehlermeldung:
Ausnahme System.IndexOutOfRangeException wurde im ausgeführten Programm ausgelöst:
Index was outside the bounds of the array.

BtnEncodeClick() - E:\Crypt\MainForm.vb:40,6
OnClick()
OnClick()
OnMouseUp()
WmMouseUp()
WndProc()
WndProc()
WndProc()
OnMessage()
WndProc()
DebuggableCallback()
System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop()
RunMessageLoopInner()
RunMessageLoop()
Run()
OnRun()
DoApplicationModel()
Run()
Main() - 17d14f5c-a337-4978-8281-53493378c1071.vb:81,13
Der Compiler meldet aber auch nichts.
Die entsprechende Zeile:
Code:
arrIntern(intI) = arrErsatz(intJ)
Kompletter Code:
Code:
        Dim arrEingabe() As Char = txtEingabe.Text.ToCharArray
        Dim arrIntern() As Char = {}
        Dim ende As String
        Dim arrZeichen() As Char = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}
        Dim arrErsatz() As Char = {"N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M"}
        Dim intI As Integer
        Dim intJ As Integer
        Dim chrZeichen As Char
        Dim chrZZeichen As Char
        
        For intI = 0 To arrEingabe.Length() - 1
            For intJ = 0 To arrZeichen.Length() - 1
                chrZZeichen = arrEingabe(intI)
                If ([Char].IsLower(chrZZeichen)) Then
                    chrZeichen = [Char].ToUpper(chrZZeichen)
                Else
                    chrZeichen = chrZZeichen
                End If
                If (chrZeichen = arrZeichen(intJ)) Then
                    arrIntern(intI) = arrErsatz(intJ)
                End If
            Next
        Next
        ende = arrIntern.ToString()
        txtAusgabe.Text = ende
        txtEingabe.Text = ""
 
Afaik beginnen Arrays in VB bei 1 und nicht bei 0. Und laufen dann natürlich bis zur Länge und nicht Länge - 1.
 
arrIntern() ist ja leer, also von der Länge 0. Du versuchst nun ein Array mit der Größe X da rein zu packen. Das kann nicht funktionieren und daher kommt die Exception "IndexOutOfRangeException". Du musst also die Array-Grenzen jedesmal anpassen, oder das Array schon vorher entsprechend dimensionieren.

Code:
If (chrZeichen = arrZeichen(intJ)) Then
   [b]ReDim Preserve arrIntern(intI)[/b]
   arrIntern(intI) = arrErsatz(intJ)
End If

oder wenn du es an den Anfang setzen willst:
Code:
ReDim arrIntern(arrEingabe.Length())
For intI = 0 To arrEingabe.Length() - 1
...

Außerdem hast du noch einen Fehler in der Zeile
Code:
ende = arrIntern.ToString()
Das ToString ist zuviel des Guten. ;)

@Lookshe:
Ich glaube da liegst du falsch. Der Index der meisten Arrays und Collections beginnt in der .NET-Familie bei 0.
 
Hi,

so firm bin ich VB.NET jetzt nicht aber:
offenbar möchtest Du mir dem code eine byReplacement Verschlüsselung programmieren. Dein code ist allerdings etwas umständlich. Es geht auch einfacher, folgendes snippet habe ich Dir mal geschrieben(1zu1 das was Du tust), schau Dir die Funktionen mal an:

Code:
Dim Eingabe As String = "test"      
        Dim arrZeichen() As Char = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
        Dim arrErsatz() As Char = {"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"}       
        Dim Ausgabe As String = ""
        For Each C As Char In Eingabe.ToUpper            
            Ausgabe = Ausgabe & arrErsatz(Array.IndexOf(arrZeichen, C))
        Next
 
Zurück
Oben