Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Alle Buchstaben in einem Ascii Feld rausfiltern


csigg - Do 09.06.05 15:06
Titel: Alle Buchstaben in einem Ascii Feld rausfiltern
Ich habe eine Tedit in dem entweder die Betriebsstätten Nummer oder der Betriebsstättenname eingegeben werden kann.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
procedure Tfrm_Main.prc_NLSuche;
var sqlstatement: String;
    anzahl: Integer;
    eingabe: String;
    ziffer: boolean;
begin
     anzahl := 0;
     eingabe := edtNLSuche.Text;

   //Test ob Eingabefeld leer, oder nicht, falls ja, Abbruch
     if length(eingabe) < 1 then
     begin
          MessageDlg('Es wurd nix angegeben',mtError,[mbOK],0);
          exit;
     end;

  //Test ob Eingabe mit Ziffer oder Buchstabe anfängt
  case eingabe[1of
  '0'..'9':       ziffer := true;
  else            ziffer := false;
  end;

  if ziffer then
  begin
       for  lenght(eingabe) do
       begin

       end;

  //Setzten des SQL-Befehl entsprechen des oberen Test
     if ziffer then
     begin
      sqlstatement := 'SELECT * FROM NL ' +
                      'WHERE NLNR = ' + edtNLSuche.Text;
     end
     else
     begin
      sqlstatement := 'SELECT * FROM NL ' +
                      'WHERE NAME LIKE ''%' + edtNLSuche.Text + '%''';
     end;
......
[u][/u]

Jetzt sollte ich allerdings noch sicherstellen das wenn es sich um ziffern handelt, dass alles was nicht Ziffer ist herausgefiltert wird, bzw. wenn es sich um Buchstaben handelt sollten alle Ziffern raus. Das erste Zeichen ist dabei das enscheidende.


uall@ogc - Do 09.06.05 15:12


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
s := 'asdasdasdasd43wersfgg3456erfdsfsdf';

if (ord(s[1]) >= ord('0')) and (ord(s[1]) <= ord('9')) then
begin
  for i := 1 to length(s) do
    if (ord(s[i]) >= ord('0')) and (ord(s[i]) <= ord('9')) then
      t := t+s[i];
end else
if (upcase(ord(s[1])) >= ord('A')) and (upcase(ord(s[1])) <= ord('Z')) then
begin
  for i := 1 to length(s) do
    if (upcase(ord(s[i])) >= ord('A')) and (upcase(ord(s[i])) <= ord('Z')) then
      t := t+s[i];
end;


ungetestet


csigg - Do 09.06.05 15:36

Funktioniert nicht, es meldet immer Inkopatible Typen.

Ich schaus mir mal an und poste dann den richtigen code.


csigg - Do 09.06.05 15:44

Du hast einfach das Ord und das Upcase verdreht. Berichtigte Version:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (ord(eingabe[1]) >= ord('0')) and (ord(eingabe[1]) <= ord('9')) then
        begin
             for i := 1 to length(eingabe) do
                 if (ord(eingabe[i]) >= ord('0')) and (ord(eingabe[i]) <= ord('9')) then
                    t := t+eingabe[i];
                 end else
        if (ord(Upcase(eingabe[1])) >= ord('A')) and (ord(Upcase(eingabe[1])) <= ord('Z')) then
        begin
             for i := 1 to length(eingabe) do
                 if (ord(Upcase(eingabe[i])) >= ord('A')) and (ord(Upcase(eingabe[i])) <= ord('Z')) then
                    t := t+eingabe[i];
        end;

Funktioniert perfekt


HiteHower - Mo 04.07.05 11:34

Hallo Leute ich versuch mir seit 2 Tagen selber bisschen Delphi beizubringen!
Hab also ne Frage:
Wie kann ich in einem Edit bewirken das keine Zahlen eingegeben werden können?


csigg - Mo 04.07.05 13:32

du könntest mit OnKeyPress jede Tastatureingabe abfangen, prüfen ob es ne Zahl, wenn ja nicht darstellen, aber vielleicht gibt es auch noch ne bessere Methode.