Stringsplitter (Aufteilen von Zeichenketten)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

PacMani

Betreff: Stringsplitter (Aufteilen von Zeichenketten)

BeitragDi, Feb 16, 2010 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, mein erster Eintrag im Codearchiv Wink

Zitat:
Worum geht es?
Wir haben eine Zeichenkette die ungefähr wie folgt aussieht:
Code: [AUSKLAPPEN]
Dies;ist;ein;Test

Die Zeichenkette soll nun passend zu den Semikolons in ihre Einzelteile zerlegt werden und in einem String-Array gespeichert werden (hier ein Element pro Zeile), die Trennzeichen (Semikolons) entfallen:
Code: [AUSKLAPPEN]
Dies
ist
ein
Test


Zitat:
Wie wird dies erledigt?
Mit diesem Stückchen Code wird unser String in einen passenden String-Array gespeichert, der dann nach Ausführung des Befehls ausgelesen werden kann - ein Beispiel für mehrzeilige Textausgabe findet sich hier drunter:
Code: [AUSKLAPPEN]
Dim SplitString$(0) ;Initialisierung des Stringarrays das die einzelnen Elemente nach Befehlsausführung enthält
Global SplitCount% ;Enthält die Anzahl der Elemente nach Befehlsausführung


;Funktionskopf - Strng$ ist die aufzuteilende Zeichenkette, SplitChar$ das Trennzeichen (im Bsp. oben ist es das Semikolon)
Function Split(Strng$, SplitChar$)
   SplitCount = 0

   ;Diese Schleife durchläuft die Zeichenkette zeichenweise und errechnet wie viele Elemente herausgeteilt werden können
   For i = 1 To Len(Strng)
      Local CurChar$ = Mid(Strng, i, 1)
      If CurChar = SplitChar Then SplitCount=SplitCount+1
   Next

   ;Somit kann nun das Stringarray mit den Einzelelementen korrekt dimensioniert werden
   Dim SplitString$(SplitCount)
   Local CurrentSplit%

   ;Diese Schleife durchläuft die Zeichenkette nun erneut zeichenweise durch und sortiert die Einzelelemente in den Stringarray ein
   For i = 1 To Len(Strng)
      CurChar$ = Mid(Strng, i, 1)
      If CurChar <> SplitChar Then
         SplitString(CurrentSplit)=SplitString(CurrentSplit)+CurChar
      Else
         CurrentSplit=CurrentSplit+1
      End If
   Next
End Function


Zitat:
Wie wende ich die Funktion an?
Das Anwenden der Funktion ist recht simpel. Nach ihrer Ausführung kann man durch Zugriff auf die globalen Variablen jedes Element des Strings einfach durchlaufen - dazu wird auch SplitCount% benötigt:
Code: [AUSKLAPPEN]
Split("Ich|mag|keine|ganzen|Strings.", "|")
For i = 0 To SplitCount
   Print SplitString(i)
Next

Hier aber ein erweitertes Beispiel zur Ausgabe von mehrzeiligem Text (Zeilenumbruch durch "~"), der auch zentriert werden und in seinem Zeilenabstand geändert werden kann:
Code: [AUSKLAPPEN]
;x = X-Koordinate des ersten Zeichens der ersten Zeile
;y = Y-Koordinate der ersten Zeile
;strng$ = Zeichenkette die mehrzeilig ausgegeben werden soll (Bsp.: "Ich hasse~einzeiligen Text~ganz doll!")
;centre_x = Zentriert alle Zeilen um die X-Koordinate
;centre_y = Zentriert die Zeilen um die Y-Koordinate
;spacing = Größe des Zeilenabstands, 0 bedeutet normaler Zeilenumbruch ohne Leerraum

Function TextMultiline(x, y, strng$, centre_x = False, centre_y = False, spacing = 0)
   Split(strng, "~")
   Local CentreHeight% ;Y-Koordinaten bei zentriertem Text, hier nicht von Bedeutung
   If centre_y Then CentreHeight = (FontHeight()*(SplitCount+1)/2)+(spacing*SplitCount/2)
   For i = 0 To SplitCount
      Text x, y+i*FontHeight()+spacing*i-CentreHeight, SplitString(i), centre_x
   Next
End Function

Das sollte alles sein! Bei Fragen zum Code bitte private Nachricht schicken Wink
  • Zuletzt bearbeitet von PacMani am Mi, Jun 09, 2010 16:24, insgesamt 7-mal bearbeitet

SpionAtom

BeitragMi, Feb 17, 2010 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Bisl suchen: https://www.blitzforum.de/foru...112#198112

Wobei unsere Lösungen recht ähnlich sind..
Bei meinem Algo ist es möglich beliebig viele Trennzeichen zwischen zwei Wörter zu packen.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group