Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi String in Zahlen und Zeichen zerlegen (https://www.delphipraxis.net/87015-string-zahlen-und-zeichen-zerlegen.html)

needatip 22. Feb 2007 08:55


String in Zahlen und Zeichen zerlegen
 
Hallo,
ich hab einen beliebeigen String aus einer Zahl und einem möglichen nachgestelltem Buchstaben, der jeweils in eine Zahl und dem einzelnen nachfolgenden Zeichen zerlegt werden soll. Das letzte Zeichen im String ist nicht immer vorhanden. d.h. dann steht eben nur eine Zahl im String.

Beispiele:
'123a' ERGEBNIS: Zahl 123 aus String filtern und jeweils den Zahlenteil in eine Integer-Variable und das 'a' in eine Char-Variable.
'7b' Ergebnis - 7 | b
'1002c' Ergebnis 1002 | c
'6632x' Ergebnis 6632 | x
'1224' Ergebnis 1224

Wie löst man das am schnellsten.
Kann mir da jemand helfen?

Ferber 22. Feb 2007 09:01

Re: String in Zahlen und Zeichen zerlegen
 
Hallo !
Möglichkeiten wäre mit 'val' eine versuchsweise Umwandlung in eine Zahl,
oder mit ord(LetztesZeichen) das letzte Zeichen zu prüfen.
mfg Ferber

yörsch 22. Feb 2007 09:25

Re: String in Zahlen und Zeichen zerlegen
 
ungetestet!
Delphi-Quellcode:
  if StrToIntDef(RightStr(s,1),99) = 99 then
  begin
    // Letztes Zeichen ist ein Buchstabe
    c := RightStr(s,1)[1];
    i := strtoint(LeftStr(s,lenght(s)-1));
  end
  else
    begin
      i := strtoint(s)
      c := #13; // Default
    end;

needatip 22. Feb 2007 09:57

Re: String in Zahlen und Zeichen zerlegen
 
Danke, funktioniert schon ganz gut, hab nur die Schreibfehler ausgesbessert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    c : Char;
    s : string;
begin
s := Edit1.Text;
if StrToIntDef(RightStr(s,1),99) = 99 then
  begin
    // Letztes Zeichen ist ein Buchstabe
    c := RightStr(s,1)[1];
    i := strtoint(LeftStr(s,length(s)-1));
  end
  else
    begin
      i := strtoint(s);
      c := #13; // Default
    end;
    ShowMessage('i= '+IntToStr(i)+', c= '+c); // nur zur Anzeige
end;
Dann soll der Benutzer entweder nur eine Zahl oder eine Zahl gefolgt von einem Buchstaben in das Edit-Feld eingeben können.
Beispiel:
123a
1003f
245
Wie kann ich dann Fehleingaben abfangen?

needatip 22. Feb 2007 09:59

Re: String in Zahlen und Zeichen zerlegen
 
Ich wollte noch ergänzen nur Kleinbuchstaben !!!

In der Art .. if c in ['a'..'z'] then ..
oder so ähnlich.

marabu 22. Feb 2007 13:31

Re: String in Zahlen und Zeichen zerlegen
 
Hallo,

eine kleine Anregung - im Sinne von Beitrag #2:

Delphi-Quellcode:
function IsValidKey(s: String): Boolean;
var
  number, index: Integer;
begin
  Val(s, number, index);
  Result := (index = 0) or (s = '')
         or ( (index > 1) and (s[index] in ['a'..'z']) and (index = Length(s)) );
end;

procedure TDemoForm.EditChange(Sender: TObject);
begin
  with Sender as TEdit do
    if IsValidKey(Text)
      then Color := clWhite
      else Color := clYellow;
end;
Grüße vom marabu

needatip 22. Feb 2007 14:42

Re: String in Zahlen und Zeichen zerlegen
 
:thumb:
Saubere Lösung, echt klasse !

Problem ist gelöst.
Danke.


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