AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Überprüfen ob Char ein vernünftiges Zeichen enthält?
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob Char ein vernünftiges Zeichen enthält?

Ein Thema von ichbins · begonnen am 17. Feb 2006 · letzter Beitrag vom 18. Feb 2006
Antwort Antwort
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#1

Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 17. Feb 2006, 14:39
Hi, gibt es eine Funktion, mit deren Hilfe ich überpfüfen kann, ob ein Char einen darstellbaren Wert enthält? (Buchstabe, Ziffer, Sonderzeichen) und nicht sowas wie #0 oder irgend so ein schwarzes Kästchen

danke
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#2

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 17. Feb 2006, 14:47
Bei Google suchenascii steuerzeichen
Im Prinzip musst du jeweils den Ordinalwert eines zeichens ermitteln, und prüfen, ob der möglich ist. Die Liste müsstest du wohl selbst erstellen
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 17. Feb 2006, 19:35
soweit war ich auch schon...

aber ich dachte Delphi hat da vllt eine vordefinierte Funktion.

Delphi-Quellcode:
function sinnvoll(c:char):boolean;
const
  worths='abcdefghijklmnopqrstuvwxyzäöüABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ+-_.,;:''#*~´`ß?=)(/&%$§"!°^<>|\}][{³² @€µáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ';
begin
  result:=pos(c,worths)>0;
end;
//edit: @ und € vergessen
//edit2: und das ganze aboschdrofzeugs áé ´

die Zeichentabelle von M$ macht das ja auch irgendwie ?
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 17. Feb 2006, 21:01
Hallo Michael,

nicht Delphi, sondern Windows hat da eine Funktion:

Delphi-Quellcode:
// uses Windows;

function GlyphIndex(Canvas: TCanvas; wc: WideChar): Cardinal;
var
  index: Word;
  flags: Cardinal;
begin
  flags := GGI_MARK_NONEXISTING_GLYPHS;
  if GetGlyphIndicesW(Canvas.Handle, @wc, 1, @index, flags) = GDI_ERROR
    then Result := GDI_ERROR
    else Result := Index;
end;
Funktioniert aber nicht mit allen Fonts zuverlässig. Wenn du eine absolut zuverlässige Funktion brauchst, dann wirst du wahrscheinlich die Fonts direkt untersuchen müssen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von retnyg
retnyg

Registriert seit: 12. Feb 2005
193 Beiträge
 
#5

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 17. Feb 2006, 22:23
@marabu: willst du etwa jeden buchstaben erst auf den canvas malen, um ihn dann zu prüfen ?

@ichbins:
dein code wird zwar funktionieren, ist aber ungeschickt implementiert, da das pos jedesmal den gesamten (oder einen teil) des strings durchscannen muss, was sehr lange dauern kann, da du ja jedes zeichen eines strings prüfen musst.

am einfachsten prüfst du einfach auf den ordinalwert, oder guckst ob das Zeichen in einer menge enthalten ist

Delphi-Quellcode:
function isAscii(c:char):boolean;
begin
// mengenprüfung
   //result := (c in 'A'..'Z','a'..'z','ä','ö','ü');

// oder per ordinalwert
   case byte(c) of 32..126, 128..165: result := true;
   else result := false;
   end;
end;
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 18. Feb 2006, 01:01
Zitat von retnyg:
@marabu: willst du etwa jeden buchstaben erst auf den canvas malen, um ihn dann zu prüfen ?
Nö.
Der OP wollte die Zeichen die nicht darstellbar sind, marabu hat ihm exakt das gegeben.
Es wird geprüft ob der angegebene DC eines der Zeichen in einem Unicode string nicht rendern kann.
Deine hardcoded Variante ist dagegen etwas plump, schließlich können manche Fonts mehr Zeichen darstellen als andere.
Robert Giesecke
  Mit Zitat antworten Zitat
Benutzerbild von retnyg
retnyg

Registriert seit: 12. Feb 2005
193 Beiträge
 
#7

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 18. Feb 2006, 01:58
hier geht es aber nicht wirklich um fonts...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Überprüfen ob Char ein vernünftiges Zeichen enthält?

  Alt 18. Feb 2006, 08:41
Hallo gynter,

"darstellbar" und "schwarze Kästchen" sind die Worte von Michael gewesen - das kann ich nur mit dem Font in Verbindung beantworten. Wenn die Font-Resource ordnungsgemäß mitteilt, welche CharCodes sie rendern kann, dann liefert mein Code korrekte Ergebnisse. Manche (ältere) Fonts bieten z.B. für das Euro-Zeichen #128 keinen Glyph an, informieren aber auch nicht darüber. In solch einem Fall liefert GlyphIndex den CharCode zurück, aber gerendert wird der Font Default Character. Canvas als Parameter heißt nicht, dass ich rendere. Die API Funktion erfährt so nur, welchen Font sie untersuchen soll. Wie geschrieben, nicht immer funktioniert das so wie geplant.

Sollte ich Michael falsch verstanden haben, dann tut es mir leid.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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