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?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.
Suchen von Zeichenfolgen ab einer Position
Re: Suchen von Zeichenfolgen ab einer Position
Re: Suchen von Zeichenfolgen ab einer Position
Ja, das muss man halt umrechnen.
Unit lazutf8 bietet
für dich vllt. auch noch interessant:
Unit lazutf8 bietet
Code: Alles auswählen
function UTF8CharStart(UTF8Str: PChar; Len, CharIndex: PtrInt): PChar;
function UTF8CharToByteIndex(UTF8Str: PChar; Len, CharIndex: PtrInt): PtrInt;
Code: Alles auswählen
function UTF8Pos(const SearchForText, SearchInText: string; StartPos: SizeInt = 1): PtrInt;
Re: Suchen von Zeichenfolgen ab einer Position
Ah ok, vielen Dank für den Hinweis. Da werde ich jetzt erstmal etwas rumspielen.
-
- 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
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.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?
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
Re: Suchen von Zeichenfolgen ab einer Position
Quatsch, "combining diacritical marks" sind - wie ihr Name schon sagt - immer zu kombinieren und nie einzeln zu drucken.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.
Das ist zwar tatsächlich ein Unding, dafür gibt es aber die Normalisierung.
Re: Suchen von Zeichenfolgen ab einer Position
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
Wie die Zeichen am Bildschirm dargestellt (gedruckt) werden, ist doch Sache der Glyphen.
VG, Kay
-
- 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
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
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.
-
- 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
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.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.
-Michael