PBXB64 String-Operationen

30+ Funktionen Standard

PBXB64 V18 verbindet 30+ eingebaute String-Funktionen mit EVAL$, StringX-Vergleichen, Wildcards, Suche, Ersetzung und REGEX-Helfern. ANSI- und Unicode-Operationen nutzen dieselben Intrinsics: LEN, LEFT$, RIGHT$, MID$, MID$-Zuweisung, INSTR, UCASE$, LCASE$, TRIM$, LSET und RSET arbeiten sowohl mit STRING als auch mit WSTRING.

Integriert - keine externe Regex-DLL

REGEXPR 1.25 Regular Expressions

PBXB64 V18 stellt die integrierte REGEXPR-1.25-Engine über PB-kompatible Anweisungen und StringX-Helfer bereit. Sie unterstützt Gruppen und Rückverweise, begrenzte Quantifizierer, Alternativen, Wortgrenzen, Zeichenklassen, gierige und kürzeste Treffer, Groß-/Kleinschreibungssteuerung, binärsichere Zielstrings, Trefferpositionen, Capture-Texte und globale Ersetzungen.

Erfasste Daten extrahieren

REGEX$ liefert eine gewählte Capture-Gruppe
FUNCTION PBMAIN() AS LONG LOCAL source AS STRING LOCAL pattern AS STRING LOCAL nameOnly AS STRING source = "User: Ada Lovelace, ID: 1843" pattern = "User: ([A-Za-z]+ [A-Za-z]+)" nameOnly = REGEX$(pattern, source, 1) PRINT nameOnly ' Ada Lovelace FUNCTION = 0 END FUNCTION

Ein Ausdruck findet den Treffer und liefert Capture-Gruppe 1. Manuelles Scannen, Trennzeichen-Zählen und eigener Parserzustand entfallen.

Jeden Treffer umformatieren

REGEXREPLACE$ mit Capture-Referenzen
FUNCTION PBMAIN() AS LONG LOCAL result AS STRING result = REGEXREPLACE$("([A-Za-z]+) ([A-Za-z]+)", _ "Ada Lovelace and Grace Hopper", "$2, $1") PRINT result ' Lovelace, Ada and Hopper, Grace FUNCTION = 0 END FUNCTION

$0, $1 und Referenzen im Stil ${1} machen strukturierte Ersetzungen kompakt. Die Ersetzung verarbeitet alle Treffer.

Position und Länge erhalten

PowerBASIC-kompatibles REGEXPR-Statement
LOCAL source AS STRING, startAt AS LONG, matchLen AS LONG source = "Order AB-2048 is ready" REGEXPR "[A-Z]{2}-[0-9]{4}" IN source TO startAt, matchLen PRINT startAt, matchLen

Die Statement-Form liefert 1-basierte Position und Länge. Bestehender PB-Code kann danach mit MID$ fortfahren oder die Offsets in einem Parser verwenden.

Ersetzung im PB-Dialekt

REGREPL-Statement mit Rückverweisen
LOCAL source AS STRING, result AS STRING, nextAt AS LONG source = "John Smith" REGREPL "([a-z]+) ([a-z]+)" IN source _ WITH "\02, \01" TO nextAt, result PRINT result ' Smith, John

Die Statement-Syntax unterstützt PB-Tags von \00 bis \99 und liefert neben dem Ergebnis auch die nächste Position.

ANSI String-Funktionen

ANSI String-Operationen
FUNCTION PBMAIN() AS LONG LOCAL s AS STRING LOCAL t AS STRING s = " Hello World " PRINT "LEN: "; LEN(s) ' 15 PRINT "TRIM$: "; TRIM$(s) ' "Hello World" PRINT "LCASE$: "; LCASE$(s) ' " hello world " PRINT "UCASE$: "; UCASE$(s) ' " HELLO WORLD " t = LEFT$(s, 7) ' " Hello" t = RIGHT$(s, 6) ' "orld " t = MID$(s, 5, 3) ' "lo " PRINT "INSTR: "; INSTR(s, "World") ' 9 ' Zuweisung via MID$ MID$(s, 9, 5) = "Universe" PRINT "After: "; s ' " Hello Universe" FUNCTION = 0 END FUNCTION

Vollständige ANSI-String-API: LEN, LEFT$, RIGHT$, MID$, INSTR, UCASE$, LCASE$, TRIM$, LTRIM$, RTRIM$, SPACE$, STRING$, CHOOSE$, FORMAT$, STR$, VAL, HEX$, OCT$, BIN$.

WSTRING - Wide-Character-Strings

Vollständiger Unicode-Support ohne Sonderbefehle: LEN, LEFT$, RIGHT$, MID$, INSTR, UCASE$, LCASE$ und TRIM$ arbeiten direkt mit WSTRING. UTF-16-Encoding, korrekte Längen-Zählung und BYREF-Übergabe.

WSTRING Unicode-Operationen
FUNCTION PBMAIN() AS LONG LOCAL ws AS WSTRING ws = "Hello World" PRINT "LEN: "; LEN(ws) ' 11 PRINT "LEFT$: "; LEFT$(ws, 5) ' "Hello" PRINT "RIGHT$: "; RIGHT$(ws, 5) ' "World" PRINT "MID$: "; MID$(ws, 7, 3) ' "Wor" ' Unicode-Inhalt ws = "Grüße" PRINT "LEN: "; LEN(ws) ' 5 (Zeichen, nicht Bytes) FUNCTION = 0 END FUNCTION

Keine separaten W-Befehle nötig: LEN, LEFT$, RIGHT$, MID$, INSTR, UCASE$, LCASE$ und TRIM$ erkennen WSTRING automatisch. Korrekte Zeichen-Zählung (nicht Byte-Zählung) für UTF-16-Inhalt.

LSET / RSET - Feste-Breiten-Auffüllung

Links-/Rechts-Auffüllung
FUNCTION PBMAIN() AS LONG LOCAL s AS STRING s = SPACE$(20) LSET s = "Hello" ' Links-bündig, rechts aufgefüllt PRINT "LSET: |"; s; "|" s = SPACE$(20) RSET s = "Hello" ' Rechts-bündig, links aufgefüllt PRINT "RSET: |"; s; "|" FUNCTION = 0 END FUNCTION

LSET und RSET sind echte Implementierungen (keine Stubs), die links-bündige und rechts-bündige Festbreiten-Strings erzeugen. Auch: CSET/CSET$ für Zentrierung.

BYREF-String-Parameter

Strings, die BYREF übergeben werden, werden korrekt behandelt mit caller-owned Lebenszyklus und GEP-basiertem Adressieren.

BYREF-String-Modifikation
FUNCTION ModifyString(BYREF s AS STRING) AS LONG s = "Modified" FUNCTION = 0 END FUNCTION FUNCTION PBMAIN() AS LONG LOCAL msg AS STRING msg = "Original" ModifyString(msg) PRINT msg ' "Modified" FUNCTION = 0 END FUNCTION

BYREF-String-Parameter übergeben die Adresse (nicht den Wert), sodass der Callee den String des Callers modifizieren kann. String-Cleanup ist caller-owned, verhindert Double-Free.

Zurück zur Feature-Liste