![]() |
String Zeichen für Zeichen nach ANSI-Codes durchsuchen? Wie?
Hallo
Hab mal wieder ne kleine Bescheidene Frage. Ich hab den Inhalt der Zwischenablage einem String zugewiesen. Und vorher auch schon getestet ob es nur Text ist. Soweit so gut. Jetzt möchte ich aber diesen Text nach allen ANSI's durchsuchen außer nach den Ziffern 0 bis 9. Falls ein anderes Zeichen außer den Ziffern enthalten ist, ist der Text ungültig und darf nicht in's Editfeld eingefügt werden. Habe schon hier verzweifelt gesucht und auch in der Hilfe nachgesehen. Aber ich seh den Wald vor lauter Bäumen mal wieder nicht. :freak: Bis jetzt sieht es so aus:
Delphi-Quellcode:
Hoffe mir kann jemand helfen.
procedure TForm1.Einfuegen1Click(Sender: TObject);
var Eingabe, Ausgabe, Zeichen: String; begin begin if not 'bla bla bla Zwischenablage nix Text usw. das übliche' then Application.MessageBox('bla bla bla','bla bla',48) else Eingabe := Clipboard.AsText; 'Hier sollte nun vom ersten Zeichen an geprüft werden ob obiges zutrifft wenn dann ein Zeichen gefunden wird das keine Ziffer ist soll ne Fehlermeldung kommen und gut' 'ansonsten gehts hier weiter' Gruß Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
hi,
quick & dirty könntest du es so machen:
Delphi-Quellcode:
try
strtofloat(edit1.Text); showmessage('Zahl') except showmessage('Keine Zahl') end |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Hi Chris,
danke für die Antwort. Ist mir schon klar die Quick and dirty methode. Aber ich will es gern kompliziert und die volle Kontrolle über jedes Zeichen. Das mit der Quick and dirty hab ich schon versucht aber gefällt mir nicht. Bringt nicht den gewünschten Effekt. Trotzdem danke. Gruß Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Zitat:
|
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Oh Sorry Luckie,
jetzt hab ich mir vorher mal aus Neugier die "wie benehme ich mich hier richtig" Regeln durchgelesen wobei mir der Satz mit dem sachlich Formuliert oder wie es da heißt aufgefallen ist aber mach es dann nicht mal so. Kommt wohl von zu wenig Schlaf. Mit ANIS's mein ich die Codes von #0 bis #255 wobei ja #48 bis #57 die zahlen sind aber sobald ich bei dem suchen ( ich hoffe das geht ) auf nen code ausserhalb der #48 bis #57 stoße kann ich den inhalt der zwischenablage vergessen. hoffe ist jetzt verstädnlicher. Gruß Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Könnte man dein Problem mit einfachen Worten so umschreiben, dass du nur die Ziffern aus dem String haben willst?
|
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Falls dem so ist. Hier die Lösung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; s: String; begin s := 'sdfvsa7843vskljc023dskjv3746'; i := length(s); while i > 0 do begin if not (s[i] in ['0'..'9']) then Delete(s, i, 1); dec(i); end; ShowMessage(s); end; |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Danke Luckie,
ist zwar nicht genau das was ich mir gedacht habe aber jetzt habe ich wenigstens mal nen anfang. ne kleine stütze sozusagen. kann deinem beispiel etwas folgen werd mal sehen ob ich es so hinbasteln kann wie ich es mir vorstell. Dankschäääää Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Was hast du dir den gedacht?
Nachtrag: So geht es übrigens auch:
Delphi-Quellcode:
if not (s[i] in [#48..#57]) then
|
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
hmmm also eher so in der Art:
s := '13 gramm sind 10 zuviel' wobei hier schon nach der 13 beim ersten leerzeichen also #32 angehalten werden sollte mit ner ShowMessage('das war wohl nix') oder: s := '-124.040,012' wobei hier alles in ordnung wäre. weil nur zahlen und das minuszeichen drin sind. da will ich dann später die zahl mit dem tausendertrennzeichen wie es vom windowstaschenrechner kommt auf -124040,012 umwandeln aber wie das geht weiß ich schon das ist kein problem. oder: s := 'dieses Rezept ist nicht zum kochen gedacht' hier müßte gleich beim ersten Zeichen also dem "d" dann die Fehlermeldung kommen. hört sich wohl etwas kompliziert an aber was erklären war noch nie meine stärke. ich denke eher und handel in wenigen FLOPS *lol* Gruß Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Nächster Versuch:
Delphi-Quellcode:
function IsNumberInString(const s: String): Boolean;
var i: Integer; begin result := FALSE; i := length(s); while i > 0 do begin if (s[i] in [#48..#57]) then begin result := TRUE; exit; end; dec(i); end; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; s: String; begin s := 'sdfvsa7843vskljc023dskjv3746'; s := 'abc'; if IsNumberInString(s) then ShowMessage('Ziffer vorhanden.') else ShowMessage('War wohl nichts.'); end; |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Und noch einer:
Delphi-Quellcode:
function OnlyNumbersInString(const s: String): Boolean;
var i: Integer; begin result := TRUE; i := length(s); while i > 0 do begin if not (s[i] in [#48..#57]) then begin result := FALSE; end; dec(i); end; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; s: String; begin s := 'sdfvsa7843vskljc023dskjv3746'; s := 'a123'; if OnlyNumbersInString(s) then ShowMessage('nur Ziffer') else ShowMessage('gemischt'); end; |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Hui,
danke Luckie. Ich guck mir Dein Beispiel morgen also heute morgen mal an wenn ich ausgeschlafen habe. gehe jetzt ins bettchen *gähn* augenfastzufallendengruß Arma. |
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Warte eine habe ich noch.
|
Re: String Zeichen für Zeichen nach ANSI-Codes durchsuchen?
Jetzt habe ich es:
Delphi-Quellcode:
function IsValidFloat(const s: String): Boolean;
var i: Integer; begin result := TRUE; i := length(s); while i > 0 do begin if not (s[i] in [#48..#57, #44, #45, #46]) then begin result := FALSE; exit; end; dec(i); end; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; s: String; begin s := '13 gramm sind 10 zuviel'; //s := '-124.040,012'; //s := 'dieses Rezept ist nicht zum kochen gedacht'; if IsValidFloat(s) then ShowMessage('Zahl') else ShowMessage('gemischt'); end; |
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