Und wie kommst du jetzt darauf?mschnell hat geschrieben:Wenn vor dem Abprüfen auch nur eines Zeichens, der String komplett umcodiert wird,
Hast du dir den UTF8Scanner mal angeschaut?
Offenbar nicht.
Und wie kommst du jetzt darauf?mschnell hat geschrieben:Wenn vor dem Abprüfen auch nur eines Zeichens, der String komplett umcodiert wird,
anscheinend hab ich hier ne heftig diskussion losgetreten...theo hat geschrieben: Erklär doch mal, was du am Ende erreichen willst, so geht das leider nicht.
Mach dir keine Sorgen, das hat nichts mir dir zu tun.tictac hat geschrieben: anscheinend hab ich hier ne heftig diskussion losgetreten...
Ob mit oder ohne öäü oder ß etc. ist natürlich die entscheidende Frage.tictac hat geschrieben: ich möchte eigentlich nur überprüfen, ob in einem string, den ein anwender eingibt, nur korrekte zeichen (also die würde ich halt gern festlegen) drin sind.
(wenn das mit dem ß nicht geht, wäre das auch nur halb so schlimm)
Wenn der Scanner "s.UTF8Chars" kann, muss er entweder alles schon vorher gescannt und katalogisiert haben (immenser Zusatz-Aufwand bei UTF8Chars[1] ) oder er muss bei jedem Aufruf von UTF8Chars alles von vorne scannen (immenser Zusatz-Aufwand bei UTF8Chars[10000000] , .. , UTF8Chars[10000001] .theo hat geschrieben:Hast du dir den UTF8Scanner mal angeschaut?
Offenbar nicht.
mschnell hat geschrieben:Wenn der Scanner "s.UTF8Chars" kann muss er entweder alles schon vorher gescannt und katalogisiert haben (immenser Zusatz-Aufwand bei UTF8Chars[1] ) oder er muss bei jedem Aufruf von UTF8Chars alles von vorne scannen (immenser Zusatz-Aufwand bei UTF8Chars[10000000] (immenser Zusatz-Aufwand bei UTF8Chars[10000001]theo hat geschrieben:Hast du dir den UTF8Scanner mal angeschaut?
Offenbar nicht.
Dagegen würde nur ein Iterator (also "s.NextUTF8Char") helfen (ist ja vermutlich auch schon drin.)
Ich schaue mir den Sourcecode morgen 'mal genau an.
Das hatten wir doch soeben schon im anderen Thread diskutiert: Ich bin tatsächlich nicht an Lösungen von durch Lazarzs/FPC hervorgerufenen Problemen interessiert, sondern ausschließlich an der Verbesserung von Lazarus/FPC selber. Und da gehören die Theo-Tool leider (noch) nicht dazu. (Meine Entschuldigung an ticktack, aber dem hast Du ja geholfen, er war nur nicht ganz zufrieden).theo hat geschrieben:Dass du dich noch nie damit befasst hast, zeigt mir einfach, dass du dich nicht für Lösungsansätze interessierst - lieber labern und jammern.
Und das hat natürlich für dich überhaupt keinen Zusammenhang?mschnell hat geschrieben: Ich bin tatsächlich nicht an Lösungen von durch Lazarzs/FPC hervorgerufenen Problemen interessiert, sondern ausschließlich an der Verbesserung von Lazarus/FPC selber. Und da gehören die Theo-Tool leider (noch) nicht dazu.
also ä,ö und ü brauch ich eh nicht und bei ß wäre es zwar schön... aber nicht tragisch, wenn's nicht geht.theo hat geschrieben: Ob mit oder ohne öäü oder ß etc. ist natürlich die entscheidende Frage.
Oder anders gesagt, wenn du nur Zeichen aus dem ASCII Bereich brauchst, geht's mit sets, sonst nicht.
ja, ich weiß, vielen dank dafür,theo hat geschrieben: Beide Varianten sind eigentlich schon aufgezeigt worden.
Das Problem ist die Index-Funktion bei UTF-8-Strings.theo hat geschrieben:Warum?mschnell hat geschrieben: Er hat aber recht
Dazu hab ich das Beispiel wie folgt vervollständigt:mse hat geschrieben:Sets werden mit 16 Bit zu gross. Als Ersatz bietet sich case an:theo hat geschrieben: Der OP wollte das ß in die Menge aufnehmen. Wie machst du das?Code: Alles auswählen
{$codepage utf8} [...] var ch1: unicodechar; [...] case ch1 of 'a'..'z','A','ä','ß': begin end; [...]
Code: Alles auswählen
unit main;
{$mode objfpc}{$H+}
{$codepage utf8}
interface
uses
Classes,
SysUtils,
FileUtil,
Forms,
Controls,
Graphics,
Dialogs,
StdCtrls;
type
{ TMainForm }
TMainForm = class(TForm)
Codes : TLabel;
procedure FormCreate(Sender: TObject);
private
procedure Bewerte(c : UnicodeChar);
end;
var
MainForm : TMainForm;
implementation
{$R *.lfm}
{ TMainForm }
procedure TMainForm.FormCreate(Sender: TObject);
begin
Codes.Caption := '';
Bewerte('a');
Bewerte('b');
Bewerte('ä');
Bewerte('A');
Bewerte('B');
Bewerte('Ä');
end;
procedure TMainForm.Bewerte(c : UnicodeChar);
begin
case c of
'a'..'z','A','ä','ß':
Codes.Caption := Codes.Caption + c + ' Code ' + IntToStr(ord(c))
+ ' im Set' + #$0a;
else
Codes.Caption := Codes.Caption + c + ' Code ' + IntToStr(ord(c))
+ ' nicht im Set' + #$0a;
end;
end;
end.
Code: Alles auswählen
{$codepage utf8}
Code: Alles auswählen
{$codepage utf8}
Du bist hier auf einen Nachteil der von Lazarus gewählten Art der Unicode Unterstützung mit FPC gestossen. Bei Lazarus Programmen die auf visuelle Komponenten zugreifen, darf {$codepage utf8} oder der Compiler-Parameter -Fcutf8 nicht angegeben werden. Der Hintergrund:Heinrich Wolf hat geschrieben: Was dabei herausgekommen ist, verwirrt mich.
Code: Alles auswählen
{$codepage utf8}
var
uch1: UnicodeChar; //16bit
[...]
uch1:= 'ä';
Wer hat dir denn auf den Schlips getreten?theo hat geschrieben:Aber was ich nie kapiere, und das gilt für carli und mschnell:
Wenn man zu faul ist, sich mit einem Sachverhalt vertraut zu machen, warum reißt man denn dann die Klappe so weit auf?
Warum gibt man dann in frechem Ton Schwachsinn von sich? Das verstehe ich nicht.
Wenn ich keinen Dunst habe, dann schweige ich und hoffe, dass es keinem auffällt.
Ist das ein Generationen-Ding oder etwas ethnisches?