Umbau Funktionen nach UTF8?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Umbau Funktionen nach UTF8?

Beitrag von fliegermichl »

Hallo,

ich hatte in Delphi eine selbstgeschriebene Funktion, die nach Zeichenketten sucht und dabei auch Umlaute berücksichtigt.
Diese geht u.a. Zeichen für Zeichen ab und prüft den Inhalt:

Code: Alles auswählen

               delta := byte(abs(byte(StrPtr^)-byte(PatternPtr^)));
               if (delta=0) or
                  (strPtr^ in ['a'..'z','A'..'Z','ä','Ä','ü','Ü','ö','Ö']) and
                  (patternptr^ in ['a'..'z', 'A'..'Z','ä','Ä','ü','Ü','ö','Ö']) and
                  (delta=byte(abs(byte('A')-byte('a')))) and (bIgnoreCase) then
               begin
                 inc(StrPtr);
                 inc(PatternPtr);
               end
                else
               begin
                 Result:=False;
                 exit;
               end;
Da meckert mir FPC an, daß in dem case nur Ordinaltypen zulässig sind. Leuchtet ja auch ein weil wir hier ja Multibyte Character haben. Wie baut man solche Konstrukte am geschicktesten um? Gibt es sowas wie ein PUTF8Char?

LG Michael

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Umbau Funktionen nach UTF8?

Beitrag von Socke »

fliegermichl hat geschrieben:
Mi 21. Okt 2020, 07:30
Da meckert mir FPC an, daß in dem case nur Ordinaltypen zulässig sind. Leuchtet ja auch ein weil wir hier ja Multibyte Character haben. Wie baut man solche Konstrukte am geschicktesten um? Gibt es sowas wie ein PUTF8Char?
PChar ist schon richtig; du musst nur das aktuell und ggf. die nächsten drei weiteren Bytes prüfen (UTF-8 hat maximal 4 Bytes pro Zeichen).
Hier könnte dir die Funktion strlcomp bzw. strlicomp weiterhelfen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

PascalDragon
Beiträge: 830
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Umbau Funktionen nach UTF8?

Beitrag von PascalDragon »

fliegermichl hat geschrieben:
Mi 21. Okt 2020, 07:30
Da meckert mir FPC an, daß in dem case nur Ordinaltypen zulässig sind. Leuchtet ja auch ein weil wir hier ja Multibyte Character haben. Wie baut man solche Konstrukte am geschicktesten um? Gibt es sowas wie ein PUTF8Char?
Am besten nutzt du existierende Funktionen wie StrUtils.ContainsText (existierte auch schon in Delphi). Vor allem, wenn du mal mehr als nur Umlaute abdecken möchtest kommst du sonst vom Hundertsten ins Tausendste und baust im Endeffekt das nach was eh schon existiert.
FPC Compiler Entwickler

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Umbau Funktionen nach UTF8?

Beitrag von fliegermichl »

Gibt es da auch eine Funktion die mit Mustern arbeiten kann?
z.B.

Code: Alles auswählen

function FindPattern(str : string; Pattern : string) : boolean;
begin
 ...
end;

if FindPattern (myText, 'ab?123*def') then
 ...
 

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Umbau Funktionen nach UTF8?

Beitrag von Socke »

fliegermichl hat geschrieben:
Mi 21. Okt 2020, 11:10
Gibt es da auch eine Funktion die mit Mustern arbeiten kann?
FindPart und IsWild könnten dir weiterhelfen.
Wer hat sich eigentlich diesen Namen IsWild ausgedacht!? :lol:
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: Umbau Funktionen nach UTF8?

Beitrag von theo »


PascalDragon
Beiträge: 830
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Umbau Funktionen nach UTF8?

Beitrag von PascalDragon »

Socke hat geschrieben:
Mi 21. Okt 2020, 11:25
Wer hat sich eigentlich diesen Namen IsWild ausgedacht!? :lol:
Es kommt ganz ursprünglich vom Konzept der Platzhalterkarten in Kartenspielen (z.B. Joker). Im Englischen heißen diese Wild cards. Das ist ein gängiger Sammelausdruck für solche Zeichen.
FPC Compiler Entwickler

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Umbau Funktionen nach UTF8?

Beitrag von fliegermichl »

Socke hat geschrieben:
Mi 21. Okt 2020, 11:25
fliegermichl hat geschrieben:
Mi 21. Okt 2020, 11:10
Gibt es da auch eine Funktion die mit Mustern arbeiten kann?
FindPart und IsWild könnten dir weiterhelfen.
Wer hat sich eigentlich diesen Namen IsWild ausgedacht!? :lol:
IsWild scheint der gesuchte Kandidat zu sein. Danke sehr.

Antworten