ich kämpfe mit einem eigenartigen Problem:
Ich möchte gerne am Anfang eines Strings Zahlen und Sonderzeichen vermeiden. Dabei sollen die Texte nur bis maximal 3 Zeichen "beschnitten" werden, damit im ungünstigen Fall wenigstens noch ein kurzer Text übrig bleibt.
Dazu habe ich die "function CheckText_Nummerierung" im Internet gefunden. Allerdings werden auch die Umlaute "ÄÖÜ" und "äöü" entfernt, obwohl diese Zeichen mit "AllowedChars" erlaubt sind.
Es scheint so zu sein, dass dieses Problem am Copy-Befehl liegt: Er überträgt nicht die Umlaute.
Warum ist das so?
Und wie kann man das Problem lösen?
Vielen Dank!
Aliobaba
Die "Showmessage"-Zeilen habe ich reingeschrieben, damit ich das Problem analysieren kann.
Code: Alles auswählen
// entfernt die nicht erlaubten Zeichen, aber nur am Anfang
Function Anfangs_Nummerierung_entfernen_nT ( A_String : string ): string ;
var
sss : string;
begin
Showmessage(A_String);
A_String := trim (A_String);
Showmessage('A>'+A_String+'<');
While Length(A_String) > 3 do
begin
sss := copy (A_String,1,1);
Showmessage('B>'+sss+'<');
sss := Globl.CheckText_Nummerierung( sss );
Showmessage('C>'+sss+'<');
if sss <> '' then break;
A_String := copy ( A_String , 2, 700);
end;
Result := A_String ;
end;
Code: Alles auswählen
function CheckText_Nummerierung(AText: String): String;
var
p: PChar;
ch: string;
L: Integer;
const
AllowedChars: String = 'abcdefghijklmnopqrsßtuvwxyzäöü' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ( )' + '*:\' ;
begin
Result := '';
if AText = '' then exit;
p := @AText[1];
while p^ <> #0 do begin
ch := UnicodeToUtf8(UTF8CharacterToUnicode(p, L));
if UTF8Pos(ch, AllowedChars) > 0 then
Result := Result + ch;
inc(p, L);
end;
end;