Autor Beitrag
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 20.12.02 10:16 
Hallo !

Ich habe ein EditFeld,wo ich die Nummer "009" eingebe,mit einem Enterklick will ich das,das Programm im Feld nach den Nullen sucht und die dann rausschneidet !
Also,soll dann nur noch eine "9" stehen anstatt "009" !

Wie mache ich das ?

mit Pos() etwa ?

Jagg !
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 20.12.02 10:21 
Hallo Jagg,

die Idee mit Pos ist schon ganz gut. Ich gib Dir mal einen Tipp:

Du prüfst zu erst mit der o. g. Funktion ob eine 0 in dem String vorhanden ist. Wenn das der Fall ist dann löscht Du mit der Procedure Delete die 0. Dann prüfst Du wieder... Am besten packst Du das Prüfen und Löschen in eine While-Schleife.

Gruß
TINO
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Fr 20.12.02 10:23 
ausblenden Quelltext
1:
Label1.Caption := StringReplace(Edit1.Text, '0', '', [rfReplaceAll, rfIgnoreCase]);					


Gruß,
Markus
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 20.12.02 11:03 
@DaFox: Das währe Fatal. Den deine Funktion verändert werte wenn z.B. 010 eingegeben wird kommt da 1 und nicht 10 raus. Es geht ja nur um führende Nullen.

@Jagg: Die Idee von Tino sollte dich zum Erfolg führen, aber du darfst die 0 nur dann löschen, wenn sie an erster Stelle gefunden wurde.

Gruß
Klabautermann
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Fr 20.12.02 11:12 
Stimmt!

Da habe ich mich vom Titel ( :arrow: "herauschneiden" <> "*führende* Nullen entfernen") beirren lassen. Sorry.

Gruß,
Markus
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 20.12.02 11:28 
Klabautermann hat folgendes geschrieben:
aber du darfst die 0 nur dann löschen, wenn sie an erster Stelle gefunden wurde.

Upps... ganz vergessen :oops:
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.12.02 11:42 
Hi,

ausblenden Quelltext
1:
2:
3:
if st <> '' then      // falls überhaupt etwas vorhanden ist
  while st [1] = '0' do 
     delete (st,1,1);


In der Kürze liegt die Würze !

Gruß
Hansa
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.12.02 12:22 
hansa hat folgendes geschrieben:
ausblenden Quelltext
1:
2:
3:
if st <> '' then      // falls überhaupt etwas vorhanden ist
  while st [1] = '0' do 
     delete (st,1,1);


In der Kürze liegt die Würze !

Hast irgendwie recht. Wenn St = '0' ist macht es bumm.

Gruß Tom
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.12.02 12:27 
Hi Tom,

Zitat:
Hast irgendwie recht. Wenn St = '0' ist macht es bumm.

Was macht wo und wie Bumm :?:
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.12.02 12:31 
hansa hat folgendes geschrieben:
Was macht wo und wie Bumm :?:

- Schleife mit '0' betreten
- 1. Durchlauf: St = ''
- 2. Durchlauf: Zugriff auf St[ 1 ]. Und das dürfte nicht gehen.

Gruß Tom
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 20.12.02 12:47 
so vllt ? :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button2Click(Sender: TObject);
 var i : integer;
     s : string;
begin
  for i := 1 to Length(Edit1.Text) do
  begin
    if pos('0',Edit1.Text) <> 0 then
    begin
     Edit1.Text := s;
     Delete(s,3,1);
    end;
  end;
end;
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.12.02 12:55 
Hi,

die if st <> '' - Abfrage braucht man auch nicht, so macht es nicht BUMM :
ausblenden Quelltext
1:
2:
3:
  while st <> '' do
      IF st [1] = '0' then
       delete (st,1,1);

Warum schreibt Ihr eigentlich soviele Zeilen Code, wo ein Dreizeiler genügt ? :mrgreen:

Gruß
Hansa
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.12.02 13:01 
hansa hat folgendes geschrieben:
ausblenden Quelltext
1:
  while st <> '' do					


Warum schreibt Ihr eigentlich soviele Zeilen Code, wo ein Dreizeiler genügt ? :mrgreen:

Jau ... es wird amüsant ... Wie lange läuft Deine Schleife wohl, wenn der Ausgangstext irgendeinen Buchstaben außer 0 enthält?

Die absturzsichere und kürzere Form Deines Quelltextes ist schlicht und ergreifend: St := '';
Aber das war irgendwie nicht der Sinn des Ganzen.

Gruß Tom
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 20.12.02 13:06 
hey leute ich habe ja gar keine peilung mehr
bin heute was neben mir !
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.12.02 13:06 
Ich schlage mal vor:
ausblenden Quelltext
1:
2:
While Pos( '0', St ) = 1 do Delete( St, 1, 1 );
If St = '' Then St := '0';

Gruß Tom
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 20.12.02 13:15 
was bedeutet das denn eigentlich pos('0',st) = 1 oder 0 oder <> 0 ?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.12.02 13:16 
Hi,

Zitat:
Jau ... es wird amüsant


Dem stimme ich zu. Dein Zweizeiler stimmt trotzdem nicht. :mrgreen:
ausblenden Quelltext
1:
2:
While Pos( '0', St ) = 1 do Delete( St, 1, 1 ); 
If St = '' Then St := '0';


Wie wärs, wenn Du die beiden Zeilen vertauschst ? Glaube die zweite kann man sogar weglassen. :P

Gruß
Hansa
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Fr 20.12.02 13:19 
Was für'n Thread. Schlauer Code wäre wohl angebrachter als schlaue Sprüche. :evil:

Hier wäre meine Lösung (inspired by hansa); nicht die einzig mögliche, aber ohne Fehlerquellen:

ausblenden Quelltext
1:
2:
  while (st <> '') and (st[1] = '0') do
     delete (st,1,1);


Gruß,
Markus
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.12.02 13:23 
hansa hat folgendes geschrieben:
Dein Zweizeiler stimmt trotzdem nicht. :mrgreen:

Das ist eine Aussage ohne Beweisführung ...

Zitat:
Wie wärs, wenn Du die beiden Zeilen vertauschst ?

Gibt keinen Sinn, da das Setzen von St = '0' in der nächsten Zeile gelöscht würde.

Zitat:
Glaube die zweite kann man sogar weglassen. :P

Wenn als Ergebnis auch ein leerer String erlaubt ist: ja. Da es um Zahlen geht, vermute ich mal: nein.

Gruß Tom
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 20.12.02 13:28 
Hi,

DaFox hat folgendes geschrieben:
Was für'n Thread.


Ist doch lustig. Der Code müßte so gehen, aber um der Haarspalterei Genüge zu tun : Paß auf, daß der Compiler-Schalter "Boolsche Ausdrücke auswerten" richtig eingestellt ist. Wenn er den Ausdruck nämlich vollständig auswertet hast Du immer noch eine Endlosschleife.

Gruß
Hansa :dunce: