'+--------------------------------------------------------------------------------------------+ '| Header: Bestimmen der Übergabeparameter | '| AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±¸©ø°§õ| Const Author="StringSplit.Bas v0181f ©2007 by ytwinky, MD"' | '| (Tastenkombination: keine) | '| | '| Zweck: Aufteilen eines Strings in ein Array :D ;-)) | '+--------------------------------------------------------------------------------------------+ Const False=0, True=Not False, CrLf=!"\r\n" Dim Shared SplitArray() As String 'ohne diese Zeile funktioniert StringSplit nicht.. Dim i As Integer Dim As String Liste="a;;bb;;ccc;;;;dddd;;eeeee;;ffffff", Trenner=";;", s Declare Function StringSplit( _ byVal Liste As String, _ byVal Trenner As String, _ byVal LeerZeilen As Integer=True _ ) As Integer Sub PrintArray(Titel As String, Liste As String, Trenner As String, byVal LeerZeilen As Integer=True) If Titel<>"" Then Print Titel For i As Integer=0 To StringSplit(Liste, Trenner, LeerZeilen) Print Using"i=#### ";i; Print SplitArray(i) Next End Sub PrintArray("1. String:", Liste, Trenner, 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 Zeilen selbst werden im Shared Array SplitArray gespeichert\r\n" _ !"(Daá dies vorhanden ist, muá vom Programmierer sichergestellt werden..)\r\n" _ !"SplitArray beginnt immer bei 0 und endet bei UBound(SplitArray)\r\n" _ !"Falls erforderlich, müssen die Ergebnisse umkopiert werden..\r\n" _ !"hf..\r\n" PrintArray("2. String:", s, CrLf) Print "3. String:" i=StringSplit("Geht auch..", CrLf) Print i, SplitArray(i) PrintArray("4. String:", "Das natrlich auch..", "\r\n") Print "Eniki.."; GetKey Function StringSplit( _ byVal Liste As String, _ byVal Trenner As String, _ byVal LeerZeilen As Integer=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 Fuktionsaufruf.. End Function