Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bug in Lowercase? (https://www.delphipraxis.net/172517-bug-lowercase.html)

greenmile 8. Jan 2013 16:48

Bug in Lowercase?
 
Hallo,

ich bin gerade vom Glauben abgefallen und kann es, ehrlich gesagt, auch nicht so recht glauben.

- Gegeben: XE3 Pro, Update 1.
- ToDo: Datei / Neu /VCL (Win32)
- Einfach einen Button auf die Form, im OnClick dann folgenden Befehl:

MessageDlg('Österreich'+#13#10+Lowercase('Österrei ch'), mtWarning, [mbOK], 0);

Heraus kommt: Beide Male das selbe? Mit allem funktioniert es, nur mit dem Ö nicht (Ä habe ich nicht versucht).
Österreich = Österreich, also nichts mit Lowercase.

Kann das jemand reproduzieren?

Helmi 8. Jan 2013 16:51

AW: Bug in Lowercase?
 
Probier mal AnsiLowerCase

Delphi-Quellcode:
MessageDlg('Österreich'+#13#10+AnsiLowercase('Österrei ch'), mtWarning, [mbOK], 0);
.

In der Hilfe ist beschrieben, dass nur A..Z klein geschrieben werden

Zitat:

LowerCase wandelt die Zeichen des mit S angegebenen String-Wertes in Kleinbuchstaben um. Die Konvertierung betrifft jedoch nur die mit 7 Bit darstellbaren ASCII-Zeichen zwischen 'A' und 'Z' (keine Umlaute). Sollen die landesspezifischen Zeichen des 8-Bit-Zeichensatzes konvertiert werden, verwenden Sie stattdessen die Funktion AnsiLowerCase.

greenmile 8. Jan 2013 17:07

AW: Bug in Lowercase?
 
Wie konnte ich nur darauf kommen, dass Lowercase nicht immer Lowercase ist? ;)
Ich bin echt zu alt für diesen ...

Werde jetzt am Anfang jeder Unit zwei Hilfsfunktionen einfügen damit ich das nicht vergesse:

function LowerCase(const S: string): string;
begin
Result := System.SysUtils.AnsiLowerCase(System.SysUtils.Lowe rcase(S));
end;

function UpperCase(const S: string): string;
begin
Result := System.SysUtils.AnsiUpperCase(System.SysUtils.Uppe rCase(S));
end;

Danke!

greenmile 8. Jan 2013 17:11

AW: Bug in Lowercase?
 
Doppelpost.

Helmi 8. Jan 2013 17:11

AW: Bug in Lowercase?
 
Zitat:

Zitat von greenmile (Beitrag 1198259)
Wie konnte ich nur darauf kommen, dass Lowercase nicht immer Lowercase ist? ;)
Ich bin echt zu alt für diesen ...

Danke!

Bin dummerweise auch schon mal da drüber geflogen ;-)

greenmile 8. Jan 2013 17:13

AW: Bug in Lowercase?
 
Sonst noch irgendwelche Basic Befehle? Trim scheint noch Trim zu sein ...

jfheins 8. Jan 2013 17:42

AW: Bug in Lowercase?
 
1. Warumj postest du immer noch Code ohne Code Tags? Dadurch werden hässliuche Leerzeichen eingefügt...
2. Warum doppelt? Hält besser?
Delphi-Quellcode:
function UpperCase(const S: string): string;
 begin
 Result := System.SysUtils.AnsiUpperCase(S); // Einmal das "richtige" sollte reichen...
 end;

greenmile 8. Jan 2013 18:25

AW: Bug in Lowercase?
 
Wenn einmal das richtige reicht, wieso gibt es dann in der VCL 2 ??

Uwe Raabe 8. Jan 2013 18:30

AW: Bug in Lowercase?
 
Zitat:

Zitat von greenmile (Beitrag 1198269)
Wenn einmal das richtige reicht, wieso gibt es dann in der VCL 2 ??

Weil die eine Version deutlich schneller ist als die andere. Wenn man sicher ist, daß der String nur reine ASCII-Zeichen enthält, kann man halt die schnellere Funktion nehmen.

greenmile 8. Jan 2013 19:23

AW: Bug in Lowercase?
 
Hmmmm ... Ok, nehme ich jetzt mal so hin. In den meisten Fällen weiß ich natürlich nicht, ob ein Ö drin ist. Dann müsste ich das vor-filtern und der ganze Geschwindigkeitsvorteil ist dahin.

Uwe Raabe 8. Jan 2013 21:08

AW: Bug in Lowercase?
 
Zitat:

Zitat von greenmile (Beitrag 1198285)
Hmmmm ... Ok, nehme ich jetzt mal so hin. In den meisten Fällen weiß ich natürlich nicht, ob ein Ö drin ist. Dann müsste ich das vor-filtern und der ganze Geschwindigkeitsvorteil ist dahin.

Es gibt Gegenden auf der Welt, in denen alle Texte mit ASCII-Zeichen < #128 dargestellt werden können. Gleiches gilt auch für die Sourcen einiger Programmiersprachen (früher galt das auch für Delphi). In diesen Fällen bietet sich die "kleine" Variante an. Sobald aber Benutzereingaben im nicht-englischen Sprachraum ins Spiel kommen, funktioniert das natürlich nicht mehr. Man kann immerhin froh sein, daß diese Erkenntnis sich auch in den USA schon an einigen Stellen breit gemacht hat.

WladiD 9. Jan 2013 07:52

AW: Bug in Lowercase?
 
LowerCase ist eine überladene Funktion und die 2. Variante:

Delphi-Quellcode:
function LowerCase(const S: string; LocaleOptions: TLocaleOptions): string;

ShowMessage(function LowerCase('Österreich ÄÖÜ', loUserLocale));
So klappt's auch mit den Umlauten. Intern wird dann das bereits erwähnte AnsiLowerCase aufgerufen.

Luckie 9. Jan 2013 11:23

AW: Bug in Lowercase?
 
@Uwe: Aber selbst als Amerikaner muss man damit rechnen, dass der Benutzer andere Zeichen eingibt und sei es nur in einen Namen. Deswegen halte ich die Begründung für recht kurzsichtig.

p80286 9. Jan 2013 11:52

AW: Bug in Lowercase?
 
Mach das mal wenn die Tastatur das nicht hergibt.
Meine amerikanischen Kollegen verfluchen jeden Müller der in Östereich Überlandleitungen aus Nußbaumholz liefert.
Das nervt!

Gruß
K-H

Uwe Raabe 9. Jan 2013 12:20

AW: Bug in Lowercase?
 
Zitat:

Zitat von Luckie (Beitrag 1198374)
Deswegen halte ich die Begründung für recht kurzsichtig.

Ich auch!

greenmile 9. Jan 2013 13:30

AW: Bug in Lowercase?
 
Vielen Dank für die Antworten. So recht leuchtet mir der Weg von Embar zwar nicht ein (Lowercast ist für mich Lowercast, egal was ich ihm gebe), aber zumindest weiß ich jetzt den Grund :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 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