string nach bestimmter anzahl splitten

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Ich denke, man darf sich heutzutage, und unter Berücksichtigung, dass der TE den VB.NET-Tag gewählt hat, der .SubString-Methode bedienen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    ich habe das mal so gemacht:

    VB.NET-Quellcode

    1. Public Function GetStringParts(input As String, partlenght As Integer) As List(Of String)
    2. Dim returns As New List(Of String)
    3. For i As Integer = 0 To input.Length / partlenght
    4. returns.Add(Mid(input, 1, partlenght))
    5. input = input.Remove(1, partlenght)
    6. Next
    7. Return returns
    8. End Function


    aber es kommt beo input.remove: Der Index und die Anzahl müssen sich auf eine Position in der Zeichenfolge beziehen.
    Parametername: count
    Nimm doch die Substring-Methode:

    VB.NET-Quellcode

    1. <Extension()>
    2. Function Teile(Text As String, Länge As Integer) As List(Of String)
    3. Teile = New List(Of String)
    4. Dim splits As Integer = CInt(Math.Floor(Text.Length / Länge))
    5. For i As Integer = 0 To splits - 1
    6. Teile.Adcl(Text.Substring(i * Länge, Länge))
    7. Next
    8. Return Teile
    9. End Function


    Falls du auch noch den Rest-String brauchst, dann häng ihn vor dem Return dran:

    VB.NET-Quellcode

    1. Dim rest As Integer = Text.Length Mod Länge
    2. If rest <> 0 Then
    3. Teile.Add(Text.Substring(splits * Länge, rest))
    4. End If
    Mid ist VB6-Ranz. Die Lösung von @Streamfighter: ist besser.

    Diese könnte man allerdings auch noch verfeinern:
    um herauszufinden wie oft eine Zahl "in eine andere Zahl hinein passt" kann man sich CInt(Math.Floor( X / Y) sparen. Dafür gibt's den arithmetischen "\"-Operator msdn.microsoft.com/de-de/library/b6ex274z%28v=vs.80%29.aspx





    EDIT: Anderer Ansatz ohne Divisionen. Der "Trick" ist das Step-Schlüsselwort der For-Schlife.

    VB.NET-Quellcode

    1. Dim LangerString As String = "Das ist wirklich ein langer String. Warum teste ich das hier?"
    2. Dim lstParts As New List(Of String)
    3. Const PartLength As Integer = 2
    4. For i As Integer = 0 To LangerString.Length Step PartLength
    5. If LangerString.Length > i + PartLength Then
    6. lstParts.Add(LangerString.Substring(i, PartLength))
    7. Else
    8. lstParts.Add(LangerString.Substring(i, LangerString.Length - i))
    9. End If
    10. Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FuFu^^“ ()

    (from p in enumerable.range(0, s.length \ 6) select s.substring(p,6)).toarray

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Debug.Print("----")
    3. System.Array.ForEach(spl("1234"), AddressOf Debug.Print)
    4. System.Array.ForEach(spl("123456"), AddressOf Debug.Print)
    5. System.Array.ForEach(spl("12345678"), AddressOf Debug.Print)
    6. Debug.Print("----")
    7. End Sub
    8. Private Function spl(ByVal s As String) As String()
    9. Return (From p In Enumerable.Range(0, s.Length \ 6 + If(s.Length Mod 6 = 0, 0, 1))
    10. Select s.Substring(p * 6, Math.Min(6, s.Length - p * 6))).ToArray
    11. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()