Da gestern der UTF8Scanner ein Thema war, wollte ich anhand dieses Beispiels mal testen, was so geht.
Herausgekommen ist das: https://www.theo.ch/lazarus/unistring.pas" onclick="window.open(this.href);return false;
Es ist so also möglich, aus der UTF8Scanner Klasse einen Record zu machen und diesem mit Operatoren zu versehen.
Das hat den Vorteil, dass es kein "Create" und "Free" braucht und direkte Zuweisungen aller Art möglich sind.
Somit verhält sich der daraus entstandene "TUniString" Record für den Benutzer ähnlich wie ein "eingebauter" String Typ.
Lustig oder?
Das Beispiel zeigt wie's geht:
Code: Alles auswählen
var s,s1:TUniString;
i:integer;
u:String;
begin
//Verschiede Arten Strings sind direkt zuweisbar:
s:='öäü lorem ipsum öäü';
s1:=' Anhang';
//Verketten:
s:=s+s1+' und noch länger';
//Einzelne "Buchstaben" zugreifen (trotz UTF-8)
s[1]:='A';
s[s.Length]:='E';
//Mit Case "Buchstaben" ersetzen
for i:=1 to s.length do
case s[i] of
'o','ö': s[i]:='@';
end;
//"String Iterator", schnellster Zugriff
s.Reset;
Repeat
Memo1.lines.add(s.Next);
until s.Done;
//Oder mit for...in;
for u in s do writeln(u);
//Als Gag eingebaut
s.SaveToFile('ustest.txt');
//und einiges mehr..
end;