Code-Beispiel
StringSplit - Fast ein bisschen SubStr
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 20.08.2010 |
Der 'Erfolg' von SubStr hatte mich überrascht, aber die Entwicklung geht bekanntlich weiter..
Im englischen Forum habe ich ein Programm entdeckt, daß dem Explode-Befehl von PHP nachempfunden ist, aber leider ist hier die Anzahl der Trennzeichen auf eins begrenzt und das war nicht ganz, was ich wollte.
In so einem Fall hilft wiedereinmal nur eins: selbermachen
'+--------------------------------------------------------------------------------------------+
'| Header: Bestimmen der Übergabeparameter |
'| AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±¸©ø°§õ|
Const Author="StringSplit.Bas v0182b ©2007 by ytwinky, MD"' |
'| (Tastenkombination: keine) |
'| |
'| Zweck: Aufteilen eines Strings in ein Array :D ;-)) |
'+--------------------------------------------------------------------------------------------+
Const False=0, True=Not False, CrLf=!"\r\n"
Dim SplitArray() As String 'Array zur Aufnahme der Ergebnisse
Dim i As Integer=0
Dim As String Liste="a;;bb;;ccc;;;;dddd;;eeeee;;ffffff", Trenner=";;", s
Declare Function StringSplit( _
Liste As String, _ 'Liste enthält den String mit den Trennern
Trenner As String, _ ' Trenner ist ein String mit den Trennzeichen
SplitArray() As String, _ 'in diesem Array werden die Teilstrings zurückgegeben
LeerZeilen As Byte=True _ 'Leerzeilenfilter True=behalten, False=nicht übernehmen
) As Integer 'Rückgabewert ist die Anzahl der Zeilen-1
Sub PrintArray(Titel As String, _
Liste As String, _
Trenner As String, _
SplitArray() As String, _
LeerZeilen As Integer=True)
If Titel<>"" Then Print Titel
For i As Integer=0 To StringSplit(Liste, Trenner, SplitArray(), LeerZeilen)
Print Using"i=#### ";i;
Print SplitArray(i)
Next
End Sub
PrintArray("1. String:", Liste, Trenner, SplitArray(), True)
PrintArray("1. String(ohne Leerzeilen):", Liste, Trenner, SplitArray(), False)
s="Hallo," &CrLf
s+="StringSplit entstand aus SubStr.Bas" &CrLf
s+="Es l„uft mit FB0.16b, mit FB0.17f und auch mit FB0.181f" &CrLf
s+="Aufruf: i=StringSplit(Liste, Trenner[, LeerZeilen])" &CrLf
s+="Parameter:" &CrLf
s+="Liste ein String mit den Daten und bestimmten Trennzeichen" &CrLf
s+=!"Trenner ein String mit Trennzeichen (also auch mehrere!!)\r\n" _
!"LeerZeilen False: Leerzeile ausfiltern, True: Leerzeilen behalten\r\n" _
!"Ausgabe: Anzahl der Zeilen-1\r\n" _
!"Die Ergebnisse werden jetzt in SplitArray() zur\129ckgegeben..\r\n" _
!"SplitArray beginnt immer bei 0 und endet bei UBound(SplitArray)\r\n" _
!"hf..\r\n"
PrintArray("2. String:", s, CrLf, SplitArray())
Print "3. String:"
i=StringSplit("Geht auch..", CrLf, SplitArray(), False)
Print i, SplitArray(i)
PrintArray("4. String:", "Funktioniert(!!) mit allen Beispielen..", "\r\n", SplitArray())
Print Command(0)
PrintArray("CommandLine:", Command, " ", SplitArray())
Print "Eniki..";
GetKey
Function StringSplit( _
Liste As String, _
Trenner As String, _
SplitArray() As String, _
LeerZeilen As Byte=True _
) As Integer
Var Vorige=1, Gefunden=0, LenTren=Len(Trenner), Index=0, s="" ' der Var-Befehl funktioniert^^
If Len(Liste)+LenTren=0 Then Return -1 'beide Längen=0? nix zu tun, fertig..
Erase SplitArray 'alte Ergebnisse löschen
Do While Instr(Vorige, Liste, Trenner) 'hier prüfen, kann ja sein, daß es Trenner nicht gibt
Gefunden=Instr(Vorige, Liste, Trenner)
ReDim Preserve SplitArray(Index) 'Preserve funktioniert mit 1-dimensionalen Arrays
s=Mid(Liste, Vorige, Gefunden-Vorige) 'Teilstring von Vorige bis Gefunden..
If s<>"" Then 'Keine Leerzeile?
SplitArray(Index)=s 'Alles klar, übernehmen..
Index+=1
Else 'Ooops, Leerstring, weiterprüfen..
If LeerZeilen Then 'Wenn False, werden leere Zeilen ausgefiltert
SplitArray(Index)=s 'Also gut, Leerzeile übernehmen..
Index+=1
End If
End If
Vorige=Gefunden+LenTren 'Vorige auf nächste Position
Loop
ReDim Preserve SplitArray(Index) 'Wenigstens Platz für EIN Element machen
If Index Then 'Stringrest in SplitArray speichern..
SplitArray(Index)=Mid(Liste, Vorige, Gefunden-Vorige)
Else 'nein, Trenner ist nicht in Liste..
SplitArray(Index)=Liste ' Liste in SplitArray speichern(Vorsicht:Speicherplatz!!)
EndIf
Return Index 'UBound wäre hier ein unnötiger Funktionsaufruf..
End Function
Es ist nicht direkt eine Kopie von SubStr geworden, sondern eigentlich ein neues Programm(die Einzelheiten stehen im Programmtext).
Neu ist auch der erstmalige Einsatz des Befehles 'Var'
Fröhliches Splitten ^^
Gruß
ytwinky
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 11.10.2007 von ytwinky angelegt.
- Die aktuellste Version wurde am 20.08.2010 von ytwinky gespeichert.
|
|