Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Stringfunktionen

StringSplit - Fast ein bisschen SubStr

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 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 Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 20.08.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen