Seite 1 von 1

Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 17:50
von Derren
Hallo liebe Gemeinde :)

Es fliegt im Forum ein schneller Code umher, der einen String im Speicher Zeichen für Zeichen durchgeht, z.B. um zu schauen ob ein Zeichen ein A ist oder ein B um entsprechende Aktionen auszuführen, also im Prinzip zum Parsen von Strings.
Habe leider keine Quelle für den Original-Code, aber es sieht in etwa so aus:

Code: Alles auswählen

*c.Character    = @string ; Pointer with the size of a char at the adress of the input string ( = first char in string)
While *c\c ! 0                              ; While EndOfString <> 0
  If *c\c = 'A'
    Debug "A gefunden"
  Endif
  *c + SizeOf(Character) ; Next Character
Wend
Naja, jetzt wollte ich mal fragen, ob es so etwas auch für Unicode/UTF8 gibt, da PB Ascii ja nicht mehr lange unterstützen wird, oder ob ich mich auf die String-Befehle verlassen muss.
Ich müsste wirklich mal testen, ob Mid() sehr viel langsamer ist, aber es wird ja eine Grund haben, warum jemand einn Code erstellt hat, der direkt auf den Speicher zugreift, anstatt die String-Befehle zu benutzen.

Hat jemand einen Tipp, wie ich mich für zukünfitge Projekte orientieren soll?

Vielen Dank! :)

Re: Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 18:08
von ts-soft
Dein Codebeispiel ist doch Unicodekompatible, oder verstehe ich was verkehrt?

PS: UTF8 gibt es nicht als nativen String, muss also nicht geparsed werden.

Re: Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 18:21
von Derren
Sondern?
Hilfe zu ReadFile: #PB_UTF8 : all read string operation will use UTF-8 if not specified otherwise (default for Unicode executable).
Und UTF8 hat unterschiedliche Zeichenkodierungslängen, oder sehe ich das falsch?

Es sollen ja nicht "interne", also zur Compilezeit bekannte Strings geparst werden, sondern hauptsächlich Strings aus Dateien.

Re: Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 18:31
von ts-soft
Derren hat geschrieben:Es sollen ja nicht "interne", also zur Compilezeit bekannte Strings geparst werden, sondern hauptsächlich Strings aus Dateien.
Die sind ja dann ASCII oder Unicode, wenn Du die parst, wie alle Strings in PB. Anders Codierte Strings existieren nur im Memory, also
nicht als String!

Ich hoffe mal, ich hab das jetzt richtig ausgedrückt. PB kennt nur 2 Arten von Strings, bzw. nur eine Art, die sich nach dem CompilerModus
richtet.

Code: Alles auswählen

natives Stringformat (ASCII oder Unicode) = ReadString(..., codierung, ...)
                                          = PeekS(..., ..., codierung)
                                          = usw.

Re: Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 21:56
von #NULL
#PB_UTF8 ist kein flag für ReadFile(). du meinst wahrscheinlich ReadString().
in dem fall meint das flag wie die daten aus der datei gelesen/interpretiert werden sollen, also als utf-8 characters. den string den du dabei erhälst hat im unicode modus trotzdem immer zwei byte pro character (utf-16).
du kannst damit also getrost eine utf-8 datei einlesen und dann mit SizeOf(Character) die zeichen durchgehen.

Re: Schneller Stringparser in Unicode?

Verfasst: 10.05.2016 22:25
von Sicro
#NULL hat geschrieben:#PB_UTF8 ist kein flag für ReadFile().
PB-Hilfe: Geschichte hat geschrieben:16. Oktober 2015 : Version 5.40 LTS
- Hinzugefügt: #PB_Ascii, #PB_UTF8 und #PB_Unicode Unterstützung bei Create/Open/ReadFile(), um den Standard Lese-/Schreibmodus festzulegen
Die deutsche Fassung der Befehlsbeschreibungen wurde diesbezüglich nicht aktualisiert. In allen anderen Sprachen wird diese neue Funktionalität beschrieben.

Gemeldet: German help: CreateFile... no description about encoding

Re: Schneller Stringparser in Unicode?

Verfasst: 11.05.2016 11:13
von Derren
D.h mein String, den ich eingelesen habe hat immer fix 1 oder 2 bytes pro Zeichen, nur abhängig vom Compilermodus?
Dann ist es ja schon so, dass der Code von oben auch weiterhin laufen sollte.

Danke für eure Antworten :) :allright:

Re: Schneller Stringparser in Unicode?

Verfasst: 11.05.2016 11:25
von mhs
Richtig :allright:

Re: Schneller Stringparser in Unicode?

Verfasst: 11.05.2016 13:14
von #NULL
Sicro hat geschrieben:Die deutsche Fassung der Befehlsbeschreibungen wurde diesbezüglich nicht aktualisiert. In allen anderen Sprachen wird diese neue Funktionalität beschrieben.
achso. hab mir jetzt die englische installiert, auf die deutsche war noch nie verlass.