Schneller Stringparser in Unicode?

Anfängerfragen zum Programmieren mit PureBasic.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Schneller Stringparser in Unicode?

Beitrag 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! :)
Signatur und so
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schneller Stringparser in Unicode?

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Schneller Stringparser in Unicode?

Beitrag 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.
Signatur und so
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schneller Stringparser in Unicode?

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Re: Schneller Stringparser in Unicode?

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Schneller Stringparser in Unicode?

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Schneller Stringparser in Unicode?

Beitrag 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:
Signatur und so
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Schneller Stringparser in Unicode?

Beitrag von mhs »

Richtig :allright:
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Re: Schneller Stringparser in Unicode?

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten