AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zusammengehörige Zeichen erkennen.

Ein Thema von himitsu · begonnen am 18. Mai 2010 · letzter Beitrag vom 19. Mai 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#1

Zusammengehörige Zeichen erkennen.

  Alt 18. Mai 2010, 07:01
Gibt es irgendeine Möglichkeit, um in einem MultiByte-String zu erkennen, ob 2 oder mehr Zeichen zusammenhängen.

Ich benötige dieses für eine verteilte Verarbeitung von Texten
und da müßte ich zwingend erkennen können, ob das letze Zeichen im Puffer ein Zeichen eines MultiByte-Verbundes ist und ob somit noch ein bissl Text nachgeladen werden müßte.
Ich würde mich da ungern auf Satz-, Steuerzeichen oder Wortanfänge verlassen.
(Aktuell suche ich Zeilenübergänge, aber das ist auch blöd, weil ich dann doppelt suchen müßte oder die Puffergrößen stark schwanken können, als wenn ich da blos das letzte Bytes/Zeichen prüfe und im Notfall nur noch ein paar Bytes mehr nachladen bräuchte)


Im Grunde benötige ich dieses aber in Verbindung mit Delphi-Referenz durchsuchenTEncoding, weswegen MSDN-Library durchsuchenIsDBCSLeadByteEx schon wegfallen würde, da ich irgendwie keine CodePage aus dem TEncoding auslesen kann.
Und bei UTF-8 (CP_UTF8) funktioniert IsDBCSLeadByteEx eh nicht.

[edit]
hab grad mitbekommen, daß TMBCSEncoding intern die CodePage kennt, aber irgendwer so besch***t war und diese nicht nach außen freigibt.
(nichtmal über Class-Helper oder Ableitungen kommt man da ran)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zusammengehörige Zeichen erkennen.

  Alt 18. Mai 2010, 20:10
OK, da inzwischen auch schon jemandem mit mir via PN geschrieben hat, hier noch ein paar Überlegungen:

- es wird eine Datei oder was Anderes stückchenweise ausgelesen und verarbeitet, dabei dürfen aber natürlich zusammenhängende Strukturen nicht getrennt werden.

- da die UTF-8-Unterstüzung seitens Windows einfach nur bescheiden ist, wird das Suchen hier, selber erledigt müssen, wobei sich die Leading-/Trailing-Bytes über einen Bitvergleich recht leicht finden lassen

- die SurrogaePairs im Unicode muß ich auch selber suchen

> heißt also, daß UTF-8, UC2 und UC2-LE manuell geprüft werden

- bei den anderen CodePages, werde ich wohl versuchen über IsLeadChar und CharNextExA, bzw. CharNextW (leider gibt es auch keine Unterstützung für UC2-LE, aber die Zeit für eine Umkodierung nehm ich in Kauf, da dieses wohl selten gnutzt wird)

Wo es allerdings ein großes Problem gibt, das sind die Combining-Chars
U+0061 U+030a (LATIN SMALL LETTER A + COMBINING RING ABOVE) ergeben ja "å"


Aktuell ist mein Plan mich erstmal an den Steuerzeichen zu orientieren und möglichst da zu schneiden und wenn da keines (in einem angemessenen Bereich) zu finden ist, dann versuch ich mir noch was zu überlegen, um MultiByte-, Combining-, Surrogate-, UTF-8-, UTF-7-Zeichen und was weiß ich noch, zu erkennen und möglichst nur vor/nach diesen Zeichen zu schneiden.

Derzeit arbeitet mein Code zeilenweise, aber diese kurzen Stückchen lassen sich einfach nicht optimal verarbeiten und es bremst extrem aus.

Nja, zumindestens hab ich vorhin mal angefangen diese Verarbeitung in eine eigene Klasse auszulagen, weil es irgendwie immer mehr wird, als Anfangs mal gedacht war.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Zusammengehörige Zeichen erkennen.

  Alt 18. Mai 2010, 22:01
In diesem FAQ ist ein Link auf eine Unterseite mit dem Titel Unicode Text Segmentation enthalten. Habe es mir jetzt nicht genauer angesehen, aber es klingt so recht vielversprechend für die Erkennung von Combining-Characters.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zusammengehörige Zeichen erkennen.

  Alt 19. Mai 2010, 20:17
Das Ganze effektiv umzusetzen scheint nicht einfach zu werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz