PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB.NET] Nach Splitten im Array immer Leere Felder!



hackerking
28.06.2009, 18:55
Jo Hey Leute...
Habe ein Problem mit Arrays:
Wenn ich etwas splitte, dann bekomme ich im array immer nach jedem string eine leerzeile...
also so:
Array(0) = "Text"
Array(1) = ""
Array(2) = "Text2"
Array(3) = ""

wie kann man die leeren felder löschen ohne die reinfolge durcheinander zu bringen?

Sawyer
29.06.2009, 01:55
Da das ganze sicherlich Dynamisch sein soll , lässt du dein array am besten mit einer for schleife durchlaufen , und löscht den Eintrag innerhalb

Beispiel:

Dim Test(5) As String
Test(0) = "Hallo"
Test(1) = ""
Test(2) = "Hallo2"
Test(3) = ""
Test(4) = "Hallo3"
Test(5) = ""

For i As Integer = 0 To Test.Length - 1 Step 1
If Test(i) = String.Empty Then
Array.Clear(Test, i, 1)
End If
NextProblem dabei nur , das da Array dann nur auf Nothing gesetzt wird , aber du möchtest sicher ein neues Array welches keine lehren stellen hat , wie du es bereits beschrieben hast.

Also musst du ein neues Array aufbauen , hier würde sich eine Funktion gut dafür eignen.

Aufruf:

Dim MeinArray As String() = NeuesArray(Test)
Beschreibung:
Wir erstellen ein neues Array und weißen als quelle die Funktion hinzu.
Mit dem Ausgangs Array Test als Parameter.

Funktion:

Private Function NeuesArray(ByVal ArrayList As String()) As String()
Dim FinaleArrayAnzahl As Integer = 0
Dim zaehler As Integer = 0

For i As Integer = 0 To ArrayList.Length - 1 Step 1
If Not ArrayList(i) = String.Empty Then
FinaleArrayAnzahl += 1
End If
Next

Dim BufferArray(FinaleArrayAnzahl - 1) As String

For x As Integer = 0 To ArrayList.Length - 1 Step 1
If Not ArrayList(x) = String.Empty Then
BufferArray(zaehler) = ArrayList(x)
zaehler += 1
End If
Next

Return BufferArrayBeschreibung:
Innerhalb der Funktion laufen wir das Array durch und schauen , wie groß unser neues Array werden muss , dabei werden natürlich die lehren Elemente ignoriert.

Danach erstellen wir ein ArrayDummy in das wir mit der neuen Länge initialisieren.

Danach laufen wir wieder das Ausgangs Array durch und prüfen innerhalb der schleife ob der Eintrag nicht leer ist , wenn das so ist schreiben wir das neue Element in unser BufferArray.

Danach zählt der zaehler um eins hoch , somit haben wir immer das richtige Array Element das wir schreiben wollen.

Hoffe ich konnte dir damit helfen ;)

MfG

Steav
29.06.2009, 13:09
Oder Du benutzt beim Splitten

StringSplitOptions.RemoveEmptyEntries (http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx)

hackerking
03.07.2009, 16:15
@papst
danke sehr ausführlich?^^

@steav
hmm ich kriege immer den fehler das keine überladene split funktion diese paramter unterstütz

inmate
03.07.2009, 16:36
http://92.241.164.198/~willkein/igoe/showthread.php?t=1273

habe das gefunden ;)

mfG

hackerking
04.07.2009, 12:40
Dabei geht aber die ursprüngliche Reihenfolge der Elemente verloren.

Sonst hätt ich das auch gemacht^^

Steav
05.07.2009, 22:04
@papst
danke sehr ausführlich?^^

@steav
hmm ich kriege immer den fehler das keine überladene split funktion diese paramter unterstütz


Dürfte ich den Code mal sehn für den der Fehler angezeigt wird^^

hackerking
06.07.2009, 15:40
@steav A.Split("|||", StringSplitOptions.RemoveEmptyEntrieß)