Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Herausfinden, ob Char ein Großbuchstabe ist. (https://www.delphipraxis.net/72042-herausfinden-ob-char-ein-grossbuchstabe-ist.html)

xZise 24. Jun 2006 12:37


Herausfinden, ob Char ein Großbuchstabe ist.
 
Wie kann ich herausbekommen, ob ein Buchstabe ein Großbuchstabe ist?

Gibt es eine vorgefertigte Methode? (z.B. isUppercase o.ä.)

Neutral General 24. Jun 2006 12:39

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Delphi-Quellcode:
function IsUpperCase(c: Char): Boolean;
begin
 Result := c = UpperCase(c);
end;
;)

ManuMF 24. Jun 2006 12:39

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Hallo,

ich kenne keine vorgefertigte Methode, aber müsste nicht
Delphi-Quellcode:
If (Char in ['A'..'Z'])
funktionieren?

Gruß,
ManuMF

xZise 24. Jun 2006 12:43

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
@ Manu: Müsste so funktionieren ;) Aber Generals-Methode klingt "sinnvoller", oder wenigstens, ist sie leichter vertändlich ;)

Danke ^^

== beantwortet ==

Christian Seehase 24. Jun 2006 12:44

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Moin Fabian,

wenn sichergestellt ist, dass es sich um ein ASCII-7 Zeichen im Bereich A bis Z bzw. a - z handelt, dass man prüfen will ginge das so:

Delphi-Quellcode:
function IsUpper(const AcValue : Char) : boolean;
begin
  Result := (ord(AcValue) and $20) = 0;
end;
Gross- und Kleinbuchstaben unterscheiden sich nur durch ein gesetztes (klein) oder eben nicht gesetztes (gross) 5. Bit

CK_CK 24. Jun 2006 12:52

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Ihr dürft nicht vergessen, dass Umlaute (äöü) nicht mit UpperCase umgewandelt werden.
Das muss selbst ausprogrammiert werden...

Gruß,

Neutral General 24. Jun 2006 12:56

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Oh stimmt.. Dann ist da Christians Lösung besser.. wenn auch schwerer zu verstehn..

Matze 24. Jun 2006 12:57

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Zitat:

Zitat von CK_CK
Ihr dürft nicht vergessen, dass Umlaute (äöü) nicht mit UpperCase umgewandelt werden.
Das muss selbst ausprogrammiert werden...

Wie wär's mit Delphi-Referenz durchsuchenAnsiUpperCase? ;)

Christian Seehase 24. Jun 2006 12:58

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Moin Neutral General,

nein, denn meine Methode funktioniert auch nur von 'A'..'Z'.
Mit Umlauten geht das nicht.

In Abwandlung Deiner Methode:

Delphi-Quellcode:
function IsUpperCase(c: Char): Boolean;
begin
Result := c = AnsiUpperCase(c);
end;
oder derer von ManuMF:

Delphi-Quellcode:
function IsUpperCase(c: Char): Boolean;
begin
Result := Char in ['A'..'Z','Ä','Ö','Ü'];
end;

Neutral General 24. Jun 2006 12:59

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Mh dann nehm ich das zurück und poste meine verbesserte Version :)
Delphi-Quellcode:
function IsUpperCase(c: Char): Boolean;
begin
 Result := c = AnsiUpperCase(c);
end;
EDIT: Zu langsam :|

Gausi 24. Jun 2006 13:27

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Das mit dem AnsiUppercase geht nicht. Es gibt da nämlich einen Buchstaben, von dem es keine Uppercase-Variante gibt: das "ß" :wink:

Hawkeye219 24. Jun 2006 14:04

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Hallo,

habt ihr euch eigentlich mal überlegt, was bei eurer UpperCase-Lösung im Hintergrund alles abläuft? Hier eine kleine Zusammenstellung:

Code:
- StackFrame einrichten
- unsichtbares TRY..FINALLY initialisieren
- Char in String umwandeln
- AnsiUpperCase aufrufen
  - LStrLen
  - LStrToPChar
  - LStrFromPCharLen
  - CharToUpperBuff
- LStrCmp
- String freigeben
- TRY..FINALLY aufräumen
- StackFrame auflösen
Die Lösung von ManuMF kommt im Vergleich dazu mit ein paar Subtraktionen aus.

Der ganze Aufwand ist aber nicht notwendig: Windows bietet eine Funktion mit Namen IsCharUpper an...

Gruß Hawkeye

himitsu 26. Jun 2006 11:07

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
IsCharUpper funktioniert auch nicht richtig (jedenfalls wenn man mit Unicode arbeited) ... bei Ansi läuft es auch nur im unteren 7-Bit-Bereich korrekt.

PS: IsCharUpper macht es intern über 'ne CASE, es sei denn die haben inzwischen auch auf eine "optimiertere" IF-Abfrage reduziert,
aber so, oder so, es is allemal schneller als die AnsiUpperCase-Methode ^^

Ydobon 26. Jun 2006 16:32

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Und die entsprechende Unicodeversion dazu? IsCharUpperW

himitsu 27. Jun 2006 12:02

Re: Herausfinden, ob Char ein Großbuchstabe ist.
 
Zitat:

Zitat von Ydobon
Und die entsprechende Unicodeversion dazu? IsCharUpperW

Nene, is schon klar, allerdings hat die einige Fehler in ihrer Implementation ... einige Zeichenbereiche werden garnicht, oder falsch umgewandelt.


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