Suchen von Zeichenfolgen ab einer Position

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von Kay »

theo hat geschrieben:Stimmt nicht, es ist nur nicht vom Byteindex her zu adressieren (ausser bei normalisiertem UTF32). Sequentiell ist es natürlich möglich, was dennn sonst?

Was einen auf den Schluss bringt, dass das "Suchen von Hinten" bezüglich der Performance bei UTF-8 meistens nicht vorteilhaft ist.

Man muss sich aber erst fragen, ob der "Buchstabenindex" überhaupt benötigt wird, oder ob der Byteindex nicht ausreicht.
Jupp, da hast du recht. Aber angenommen, du hast nur den Caret in einem TMemo, dann kannst du daraus lediglich den Buchstabenindex errechnen. Den Byteindex kennst du zu diesem Zeitpunkt nicht. Dann stelle ich mir das schwierig vor zu wissen, was ich als Parameter an PosEx übergeben muss. Eventuell steige ich ja dann schon zu spät in die Bytesequenz ein und finde gar nichts mehr oder?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von theo »

Ja, das muss man halt umrechnen.

Unit lazutf8 bietet

Code: Alles auswählen

function UTF8CharStart(UTF8Str: PChar; Len, CharIndex: PtrInt): PChar;
function UTF8CharToByteIndex(UTF8Str: PChar; Len, CharIndex: PtrInt): PtrInt;  
für dich vllt. auch noch interessant:

Code: Alles auswählen

function UTF8Pos(const SearchForText, SearchInText: string; StartPos: SizeInt = 1): PtrInt;  

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von Kay »

Ah ok, vielen Dank für den Hinweis. Da werde ich jetzt erstmal etwas rumspielen.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von mschnell »

theo hat geschrieben:Stimmt nicht, es ist nur nicht vom Byteindex her zu adressieren (ausser bei normalisiertem UTF32). Sequentiell ist es natürlich möglich, was dennn sonst?
Da Unicode (also der 32 Bit Code, nicht nur z.B. UTF8) erlaubt, ein "druckbares Zeichen" aus mehreren Code-Points zusammenzusetzen (z.B. ein ü aus einem u und den darüberzustellenden Punkten) und im "String" nicht vermerkt ist, ob diese (beiden) Codepoints einzelne "druckbare Zeichen" sind, oder zu einem einzigen "druckbaren Zeichen" zusammengesetzt werden, gibt es tatsächlich keine "Zeichenposition" in Unicode. Da ist nix dran zu ändern.

Soweit ich weiß gibt es in irgendwelchen Sprachen, die sich in Unicode darstellen lassen, auch die Notwendigkeit (nicht nur die Möglichkeit wie z.B. ein Deutsch) Zeichen unter- über- oder auf- einander zu setzen und es macht keinerlei Sinn zu definieren, welches davon "zuerst" gemalt wird.

Unicode ist eine Darstellungs-Codierung (wie PDF) und keine Codierung mit der garantiert werden kann, dass man irgendetwas auf sinnvolle Weise ausrechnen kann. In einem PDF macht es auch keinen Sinn darüber zu sinnieren, ob eine dezidierte Bild-Unterschrift "vor" oder "nach" einem Wort aus dem Text kommt, der das Bild inklusive Unterschrift umfließt.

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von theo »

mschnell hat geschrieben: Da Unicode (also der 32 Bit Code, nicht nur z.B. UTF8) erlaubt, ein "druckbares Zeichen" aus mehreren Code-Points zusammenzusetzen (z.B. ein ü aus einem u und den darüberzustellenden Punkten) und im "String" nicht vermerkt ist, ob diese (beiden) Codepoints einzelne "druckbare Zeichen" sind, oder zu einem einzigen "druckbaren Zeichen" zusammengesetzt werden, gibt es tatsächlich keine "Zeichenposition" in Unicode. Da ist nix dran zu ändern.
Quatsch, "combining diacritical marks" sind - wie ihr Name schon sagt - immer zu kombinieren und nie einzeln zu drucken.
Das ist zwar tatsächlich ein Unding, dafür gibt es aber die Normalisierung.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von Kay »

Also ich hab mal gelernt, dass UTF8 lediglich die Kodierungsvorschrift ist, d.h. mit wie vielen Bytes die einzelnen Codepositionen, die den Zeichen zugeordnet sind, dargestellt werden. Wenn ich also einen Text als Bytesequenz vorliegen habe, dann kann ich ihn auch mit einem anderen Bytestrom matchen und den Index des Vorkommens ermitteln.
Wie die Zeichen am Bildschirm dargestellt (gedruckt) werden, ist doch Sache der Glyphen.

VG, Kay

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von mschnell »

z.B. auf der Unicode Seite "General Punctation" gibt es nette Codes mit denen man beispielsweise dynamisch die Schreibrichtung ändern kann. Da sind Überlegungen zur "Zeichenposition" wohl wenig sinnvoll.

Wenn man weiß, was man tut und sicher ist dass all die netten Unicode Features tatsächlich nicht verwendet werden, kann man natürlich entsprechende Software machen. Aber einfach kommentarlos das Wort "Position" bei Unicode zu verwenden, geht nicht.

-Michael
Zuletzt geändert von mschnell am Mi 2. Apr 2014, 09:38, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Suchen von Zeichenfolgen ab einer Position

Beitrag von mschnell »

Kay hat geschrieben:Also ich hab mal gelernt, dass UTF8 lediglich die Kodierungsvorschrift ist, d.h. mit wie vielen Bytes die einzelnen Codepositionen, die den Zeichen zugeordnet sind, dargestellt werden.
Das ist richtig, aber nur der erste Schritt. Damit hat man dann eine Folge von 32 Bit große Unicodes. Danach kommen dann die komplexen Unicode-Features.

-Michael

Antworten