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 Führende Null entfernen (https://www.delphipraxis.net/92577-fuehrende-null-entfernen.html)

MarquiseDeSade 22. Mai 2007 15:16


Führende Null entfernen
 
Hallo Delphianer :-D

Ich schreibe ja momentan an einem Taschenrechner, der über eine Rücktaste verfügt. Mit dieser Taste kann die letzte Zahl wieder entfernt werden.

Beispiel:

Eingabe über Zahlenbutton: 1232 nun drückt der User die Rücktaste und im Editfeld steht 123...

Dies habe ich so gelöst:

Delphi-Quellcode:
edit1.text:=IntToStr(StrToInt(edit1.text) div 10);
    if StrToInt(edit1.text)=0 then
      edit1.text:='';
Wenn nun div 10 die Null liefert, dann wird diese ja auch ins Editfeld geschrieben. Wenn der User über die Button nun neue Zahlen eingibt, steht dann da z.B. 0124.Gibt es einen Befehl wie z.B. Trim, der anstatt der Lehrzeichen die führende Null automatisch beseitigt, oder findet ihr meine Lösung für vertretbar? :roll:

gruß tobias

mkinzler 22. Mai 2007 15:20

Re: Führende Null entfernen
 
-String in Zahl wandeln
-manuell

Die Muhkuh 22. Mai 2007 15:27

Re: Führende Null entfernen
 
Hi,

Delphi-Quellcode:
function DeleteZero(aStr: String): String;
begin
  if aStr[1] = '0' then
    Delete(aStr, 1, 1);

  Result := aStr;
end;
Sowas?

willnix 22. Mai 2007 15:28

Re: Führende Null entfernen
 
Zitat:

Zitat von MarquiseDeSade
...
Dies habe ich so gelöst:

Delphi-Quellcode:
edit1.text:=IntToStr(StrToInt(edit1.text) div 10);
    if StrToInt(edit1.text)=0 then
      edit1.text:='';
...

Warum nicht einfach so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  EditTemp: String;
begin
  EditTemp := Edit1.Text;
  Delete(EditTemp, Length(Edit1.Text), Length(Edit1.Text));
  Edit1.Text := EditTemp;
end;
Dann ergibt sich das Problem gar nicht.
Willnix

Schaedel 22. Mai 2007 15:28

Re: Führende Null entfernen
 
Delphi-Quellcode:
function LoescheFuehrendeNullen(Text :String):string;
var i : integer;
begin // wenn führende Nullen im Datensatz sind lösche diese
  for i := 1 to (length(text)-1) do begin
    if not (text[2]= ',') then begin
      if text[1] = '0' then begin
         text := copy(text,2,length(text));
      end else begin
         break;
      end;
      break;
    end;
  end;  
 result := text;
end;
Suchst du sowas?

MarquiseDeSade 22. Mai 2007 15:37

Re: Führende Null entfernen
 
Danke für die vielen Antworten....

Ich habe mich für die Variante von willnix entschieden...


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  EditTemp: String;
begin
  EditTemp := Edit1.Text;
  Delete(EditTemp, Length(Edit1.Text), Length(Edit1.Text));
  Edit1.Text := EditTemp;
end;
Denn damit lassen sie auch Zahlen behandeln, wie z.b. 23,6 :zwinker: und der Umfang ist im Rahmen. Könntest du mir nochmal erläutern, was ab delete passiert ? Was macht der Befehl length ?

Dankeschön.... :stupid:

willnix 22. Mai 2007 16:01

Re: Führende Null entfernen
 
Ok, also...
Delphi-Quellcode:
  Delete(EditTemp, Length(Edit1.Text), Length(Edit1.Text));
Lenght Gibt die Länge des Strings zurück. Also wenn 2,34 im Edit steht, ist der Wert von "Length(Edit1.Text)" 4.
So, und Delete löscht Zeichen aus einem String.
Und zwar wie folgt:
Delphi-Quellcode:
 Delete(Der String aus dem gelöscht werden soll, Die Position im String AB der gelöscht werden soll, Die Position BIS zu der gelöscht werden soll)
Wenn die länge des Strings jetzt 4 ist, dann ist die Position der letzten Ziffer auch 4 also lösche ich mit:
Delphi-Quellcode:
  Delete(EditTemp, Length(Edit1.Text), Length(Edit1.Text));
das letzte Zeichen aus dem String EditTemp.
Delphi-Quellcode:
  Delete(EditTemp, Length(Edit1.Text-1), Length(Edit1.Text-1));
Würde z.B die vorletzte Ziffer aus EditTemp löschen.
oder mit
Delphi-Quellcode:
  Delete(EditTemp, 1, 3);
Alles von der ersten bis zur 3. Position.
Ich hoffe das war verständlich
Willnix

MarquiseDeSade 22. Mai 2007 16:40

Re: Führende Null entfernen
 
:hello:

Sehr ausführlich erklärt. Vielen Dank dafür. Habe es verstanden :dp:

willnix 22. Mai 2007 17:45

Re: Führende Null entfernen
 
Ahhh!
Ich habe mich fürchterlich geirrt!
Das funktioniert zwar alles so, ABER der 3. Parameter von Delete gibt nicht die Position an bis zu der gelöscht werden soll sondern wieveile Zeichen gelöscht werden sollen.
Also muss es bei dir heißen:
Delphi-Quellcode:
Delete(EditTemp, Length(Edit1.Text), 1);
Dann löscht er von Length(Edit1.Text) aus 1 Zeichen.
Hier ist das egal weil es eh das letzte Zichen ist aber sonst... :wall:
Willnix

mkinzler 22. Mai 2007 17:56

Re: Führende Null entfernen
 
Und was passiert, wen es keine führende Null gibt? Dann wird die erste Zahl abgeschnitten.

MarquiseDeSade 22. Mai 2007 18:40

Re: Führende Null entfernen
 
Hallo :lol:

Also auch wenn es keine führende Null gibt, geht alles bestens.

Muetze1 22. Mai 2007 18:55

Re: Führende Null entfernen
 
@willnix:

Delphi-Quellcode:
Edit1.Text-1
Was soll das ergeben? Was subtrahiert er denn wie, wenn du eine Ziffer von einer Zeichnkette (String) abziehst? Das -1 gehört ausserhalb der Length() Klammern!

@MarquiseDeSade:

Von wegen. Dein Code löscht so oder so Zeichen - du fragst doch nirgendwo ab, ob es eine führende Null gibt.

@Threadersteller: Ich würde das ganze Problem anders anfangen. Du arbeitest hier mit Strings, aber warum? Eine führende Null bekommst du auch einfach anders weg: wandle den String in eine Fliesskommazahl um und dann zurück in eine Fliesskommazahl. Dabei werden eventuelle führende Nullen wie auch Exponenten (bei Bedarf, siehe Umwandlungen) entfernt bzw. ausgeschrieben.

Jens Schumann 22. Mai 2007 20:04

Re: Führende Null entfernen
 
Hallo,
ich würde führende Nullen wie folgt löschen
Delphi-Quellcode:
While str[1]='0' do
  Delete(Str,1,1);

willnix 22. Mai 2007 20:21

Re: Führende Null entfernen
 
Also um hier mal ein paar Missverständnisse aufzuklären:
Das hier:
Edit1.Text-1
War ein Tippfehler, OK.
Und was hier irgendwie untergeht mein Code, löscht kein vorangestellte Null.
Die vorangestellte Null ist entstanden weil der Threadersteller um die letze Ziffer in einem Edit zu löschen folgenden Code verwendt hat:
Delphi-Quellcode:
edit1.text:=IntToStr(StrToInt(edit1.text) div 10);
    if StrToInt(edit1.text)=0 then
      edit1.text:='';
Ich habe ihm diesen als alternaive gegeben bei der gar keine Null entsteht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  EditTemp: String;
begin
  EditTemp := Edit1.Text;
  Delete(EditTemp, Length(Edit1.Text), Length(Edit1.Text));
  Edit1.Text := EditTemp;
end;
Mein Code löscht also keine vorangestellte Null sondern umgeht deren Entstehung beim löschen der letzten Ziffer eines Edits.
Willnix

MarquiseDeSade 23. Mai 2007 15:37

Re: Führende Null entfernen
 
Zitat:

Zitat von willnix
Mein Code löscht also keine vorangestellte Null sondern umgeht deren Entstehung beim löschen der letzten Ziffer eines Edits.
Willnix

Jap, darum ging es. Auch wenn es manchmal lästig ist, sollte man doch den ganzen thread lesen :mrgreen:

gruß tobias


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