Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie unterscheidet man Groß- von Kleinbuchstaben und...? (https://www.delphipraxis.net/141429-wie-unterscheidet-man-gross-von-kleinbuchstaben-und.html)

ml-kuen 8. Okt 2009 21:28


Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Hallo Gemeinde,

suche schon eine Weile nach einer Möglichkeit, große von kleinen Buchstaben, sowie Sonderzeichen von Ziffern zu unterscheiden. Dies sollte unabhängig vom verwendeten ANSI-Characterset funktionieren. Hat jemand eine Idee?

Gruß
Michael

SirThornberry 8. Okt 2009 21:36

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Die Buchstaben und Ziffern sollten bei allen Charsets gleich sein.
Und was verstehst du unter "unterscheiden"? Wie man einen Unterschied zwischen Groß- und Kleinbuchstaben feststellt? Wie machst du es als Mensch? Genau so sollte man es dann auch umsetzen.

Wolfgang Mix 8. Okt 2009 21:41

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Schau Dir 'mal die Funktion Ord und eine ASCII-Tabelle an.
Das Alphabeth beginnt bei Gr0ßbuchstabe A = Ord(65)


[Edit] Herzlich willkommen in der DP[Edit] :dp:

Gruß

Wolfgang

Namenloser 8. Okt 2009 21:47

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
In Delphi gibt es eine sehr praktische Sache: Sets.
Delphi-Quellcode:
var
  character: char;
begin
  character := 'P'; // Irgendein Zeichen
  if character in ['a'..'z'] then
    ShowMessage('Kleinbuchstabe')
  else if character in ['A'..'Z'] then
    ShowMessage('Großbuchstabe')
  else if character in ['0'..'9'] then
    ShowMessage('Zahl')
  else
    ShowMessage('Sonderzeichen')
end;
In diesem Fall wäre allerdings das Case-Konstrukt noch eleganter:
Delphi-Quellcode:
var
  character: char;
begin
  character := 'P'; // Irgendein Zeichen
  case character of
    'a'..'z': ShowMessage('Kleinbuchstabe');
    'A'..'Z': ShowMessage('Großbuchstabe');
    '0'..'9': ShowMessage('Zahl');
    else     ShowMessage('Sonderzeichen');
  end;
end;

himitsu 8. Okt 2009 21:50

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
wenn es sich nur um die Buchstaben, wie A-Z und ÄÖÜ handelt, dann geht auch dieses
Delphi-Quellcode:
if Ord(Key) and $20 <> 0 then IstEinKleinbuchstabe;
ob es jetzt auch bei allen Sonderzeichen ala Á und Co. auch geht, kann ich allerdings nicht sagen, aber bei den normalen Buchstaben ist es immer so :angel:


[edit]
ansonsten
Delphi-Quellcode:
if AnsiUpperCase(Key)[1] = Key then IstEinGroßbuchstabe;

ml-kuen 8. Okt 2009 22:06

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Vielen Dank für eure schnelle Hilfe. Was die deutsche Sprache angeht, mögen die Lösungsvorschläge alle brauchbar sein, jedoch was ist, wenn ich auch bspw. den Kyrillischen, Grichischen oder sonstigen Zeichensatz unterstützen möchte. Bleibt mir nichts Anderes, als den aktuellen Characterset zu ermitteln um dann mit den Richtigen Sets zu arbeiten?
Um so länger ich drüber nachdenke, desto sicherer bin ich mir, dass es da kein "Allheilmittel" gibt.

Wenn's noch andere Ideen gibt, sind sie herzlich willkommen hier aufgeschrieben zu werden.

Nochmals herzlichen Dank an alle Helfer.

Michael

SirThornberry 8. Okt 2009 22:13

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Ziffern sind überall gleich. Die Buchstaben kannst du eventuell mit AnsiLowerCase und AnsiUppercase bedingt heraus finden (das ß im deutschen zum Beispiel nicht)

ml-kuen 8. Okt 2009 22:23

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Genau, ß und andere Ausreißer machen da einen Sonderfall drauß. Ausserem gibt es in andern Codesets auch Unterschiede in der Anzahl der Buchstaben des jeweiligen Alphabets.

Danke für den Tip

Michael

SirThornberry 8. Okt 2009 22:34

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Die Anzahl der Buchstaben ist egal, lediglich Buchstaben die sich nicht in Groß-/Kleinschreibung unterscheiden bilden eine Außnahme. Ansonsten kann man ermitteln ob es sich um einen Buchstaben handelt in dem man prüft ob AnsiUpperCase und AnsiLowerCase verschiedene Ergebnisse liefern

ml-kuen 8. Okt 2009 22:37

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Danach müsste ja die Lösung des Problems in den Units dieser und ähnlicher Funktionen liegen. Wo sind diese Sets oder was auch immer denn definiert? Kann man das irgwendwie rausfinden, oder liegen die in Delphi nicht als Quellcode vor?

Gruß
Michael

SirThornberry 8. Okt 2009 22:41

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Diese Funktionen (die beiden genannten) sollten nicht in Delphi implementiert sein sondern in Windows.

himitsu 8. Okt 2009 23:45

Re: Wie unterscheidet man Groß- von Kleinbuchstaben und...?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Theoretisch dürfte man auch Windows irgendwie fragen können was welches Zeichen zumindesten darstellt (Buchstabe, Zahl, Symbol usw.), allerdings weiß ich grad nichtmehr wie das ging.

In den JEDIs dürften aber auch entsprechende Funktionen vorhanden sein (hab glaub ich mal welche gesehn)

Ansonsten kann man sich die entsprechenden Informationen auch auf http://www.unicode.org/ , da diese ja direkt an der Quelle sitzen, wo die entsprechenden Standards definiert werden.


Ich hab hier zwar noch ein uraltes Projekt, welches die Infos in 'ner art kleinen ASM-DB enthält, aber diese Daten sind niemals aktuell (und inzwischen auch schon ein paar Jahre alt ... es werden ja ständig neue Zeichen dem Unicode-Standard hinzugefügt)
Ich glaub auch nicht, daß jemandem wirklich soetwas helfen kann (das wäre z.B. die Funktion UnicodeCharInfo aus'm Anhang ... die darin enthaltenen Daten stammten damals direkt von unicode.org)



Wenn ich demnächst etwas Zeit hab, dann könnte ich mal nachsehn, ob mir die entsprechenden APIs wieder einfallen,
falls nicht jemand anderes schneller ist :angel2:

PS: die Windowsanwendung Charmap.exe greift auf diese APIs zu und ließt auch einige entsprechende Daten von windows aus (falls noch keinem die Bezeichnungen in der Statusleiste aufgefallen sind)

PS: den einfachen Groß-/Kleinbuchstabenvergleich hatte ich weiter oben ja schon gepostet ... dieser Funktioniert immer, wenn auch etwas langsam (die schnelle Variante ist in meinem himXML und inzwischen auch in der MatchText-Unit verbaut)



[add]
z.B.:
MSDN-Library durchsuchenGetStringTypeA
MSDN-Library durchsuchenGetStringTypeW
MSDN-Library durchsuchenGetStringTypeEx
MSDN-Library durchsuchenIsCharAlpha
MSDN-Library durchsuchenIsCharAlphaNumeric
MSDN-Library durchsuchenIsCharLower
MSDN-Library durchsuchenIsCharUpper

[info] warum ich es damals selber implementieren wollte, war da Windows nur die Infos der installierten Gebietschemata/Sprachen enthält, aber ich alles haben wollte.

seit Windows Vista wird aber standardmäßig alles installiert[/info]


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz