String Array "Filtern"/Aufräumen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    String Array "Filtern"/Aufräumen

    Hi,

    Ich hab mir gerade eine Funktion geschrieben mit der man bestimmte Felder in einem Array löschen kann.
    In meinem Beispiel alleas was mit "//" beginnt, nur ein Leerzeichen enthalten " " und Leere Zeilen (Nothing):

    VB.NET-Quellcode

    1. Function Daten_Laden(ByVal Daten As String()) As Boolean
    2. Dim Daten2() As String
    3. Dim begrenzer As Int16 = 0
    4. For p = 0 To Daten.Length - 1
    5. If Daten(p).StartsWith("//") = True Or Daten(p) = " " Or Daten(p) = Nothing Then
    6. begrenzer += 1
    7. End If
    8. Next
    9. ReDim Daten2(Daten.Length - (begrenzer + 1))
    10. Dim o As Int16 = 0
    11. For i = 0 To Daten.Length - 1
    12. If Daten(i).StartsWith("//") = True Or Daten(i) = " " Or Daten(i) = Nothing Then
    13. Else
    14. Daten2(o) = Daten(i)
    15. o += 1
    16. End If
    17. Next
    18. 'Ab hier nicht mehr beachten
    19. Dim DBString As String = "--- DEBUG ***** ---" + Environment.NewLine
    20. For x = 0 To Daten2.Length - 1
    21. DBString = DBString & Environment.NewLine & Daten2(x).ToString
    22. Next
    23. MessageBox.Show(DBString)
    24. 'wollte das ergebnis nur mal sehen...
    25. Return True
    26. End Function


    Hätte wer einen vorschlag um das ganze abzukürzen?
    Ich weiß ja ganze genau, das ihr da die Meister überhaupt drinn seid :D
    Du könntest einen List(Of T) verwenden und diese dann wieder umwandeln.

    VB.NET-Quellcode

    1. Dim Collection As New List(Of String) From {"Hallo, Welt!",""," ","//"}
    2. Collection.RemoveAll(Function(Str) Str.StartsWith("//") OrElse String.IsNullOrWhiteSpace(Str))
    3. 'Output = Collection.ToArray()
    4. 'Msgbox(Collection(0))


    Nicht getestet. Es könnte sein, dass Du mal verschiedene Bitweisen neben OrElse probieren musst.
    Referenz: msdn.microsoft.com/en-us/library/wz3k228a(v=vs.80).aspx

    Liebe Grüße
    /nicht getestet
    In Germany we call this a Einzeiler ...

    VB.NET-Quellcode

    1. ' Testarray
    2. Dim test() = {"A", "B", "//", "//D", " ", vbCrLf, "G"}
    3. ' Der Einzeiler:
    4. Dim result() As String = Array.FindAll(test, New Predicate(Of String)(Function(s As String) As Boolean
    5. Return Not (s.StartsWith("//") OrElse String.IsNullOrWhiteSpace(s))
    6. End Function))
    7. ' und? klappt?
    8. Array.ForEach(result, AddressOf Debug.Print)