Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   führende null entfernen (https://www.delphipraxis.net/197358-fuehrende-null-entfernen.html)

Dr. Jack 1. Aug 2018 14:40

führende null entfernen
 
Hallo zusammen,

ich bekomme es leider nicht hin, eine führende Null bzw führende Nullen aus einem String zu entfernen.
Ich habe z.B. diese Artikelnummer: 00850046. Diese soll zu 850046 geändert werden.
Code:
 For i := 1 to Length(nr_pzn_bereinigt) do
           begin
           If nr_pzn_bereinigt[i] = '0' Then Delete(nr_pzn_bereinigt, i, 1)
           Else
            Break;
Ich dachte, er geht diesen String so lange durch bis er auf keine Null mehr trifft und bricht dann ab.
Geht leider nicht.

Kann jemand helfen?

jobo 1. Aug 2018 14:45

AW: führende null entfernen
 
Ja, macht er wahrscheinlich auch, direkt bei StringElement[0] wo die Länge des Strings drin steht.

Dalai 1. Aug 2018 14:47

AW: führende null entfernen
 
Sofern sichergestellt ist, dass sich im String ausschließlich Ziffern befinden, wäre StrToInt mit einem anschließenden Zurückwandeln mit IntToStr nicht einfacher?

Grüße
Dalai

Neutral General 1. Aug 2018 14:51

AW: führende null entfernen
 
Zitat:

Zitat von jobo (Beitrag 1409359)
Ja, macht er wahrscheinlich auch, direkt bei StringElement[0] wo die Länge des Strings drin steht.

Nein, die Schleife geht ab 1 los.
Das Problem ist, dass der String kürzer wird, und die Schleife so quasi "verrutscht"

Schleifendurchlauf:

i=1:
00850046 => 0850046

i=2:
0850046

Die zweite 0 hat er quasi jetzt schon übersprungen weil sich die 2. 0 jetzt nach dem Löschen der ersten auch an Position 1 befindet aber die Schleife jetzt schon bei i=2 ist.

bernau 1. Aug 2018 14:53

AW: führende null entfernen
 
Zitat:

Zitat von Dr. Jack (Beitrag 1409358)
Hallo zusammen,

ich bekomme es leider nicht hin, eine führende Null bzw führende Nullen aus einem String zu entfernen.
Ich habe z.B. diese Artikelnummer: 00850046. Diese soll zu 850046 geändert werden.
Code:
 For i := 1 to Length(nr_pzn_bereinigt) do
           begin
           If nr_pzn_bereinigt[i] = '0' Then Delete(nr_pzn_bereinigt, i, 1)
           Else
            Break;
Ich dachte, er geht diesen String so lange durch bis er auf keine Null mehr trifft und bricht dann ab.
Geht leider nicht.

Kann jemand helfen?

In deinem Code löscht du das erste Zeichen und prüfst dann das zweite Zeichen. Das ursprünglich zweite Zeichen wird aber zum ersten Zeichen, weil ja gelöscht wurde. Und du prüfst im zweiten Durchgang so gesehen das ursprünglich dritte Zeichen. u.s.w.


(Edit: Da war jemand schneller)

Delphi.Narium 1. Aug 2018 14:54

AW: führende null entfernen
 
Delphi-Quellcode:
nr_pzn_bereinigt[i] := IntToStr(StrToInt(nr_pzn_bereinigt[i]));
geht, solange nur Ziffern vorkommen, kommt mal ein Buchstabe (oder besser einen Nichtziffer) geht's schief.

Delphi-Quellcode:
while Copy(nr_pzn_bereinigt[i],1,1) = '0' do begin
  nr_pzn_bereinigt[i] := Copy(nr_pzn_bereinigt[i],2,Length(nr_pzn_bereinigt[i]));
end;
Beispiel zu Deinem Vorgehen:

i ist 1
00850046
1. Zeichen = '0'
0850046 bleibt dann übrig

i wird nun 2
zweites Zeichen ist nun 8, da das erste Zeichen entfernt wurde.
0850046 bleibt dann übrig

i wird nun 3
drittest Zeichen = 5
0850046 bleibt dann übrig

i wird nun 4
viertes Zeichen = 0
085046 bleibt dann übrig

i wird nun 5
fünftes Zeichen = 4
085046 bleibt dann übrig

i wird nun 6
fünftes Zeichen = 6
085046 bleibt dann übrig

Das ist eher so 'ner Art zufälliges Nullenentfernen, abhängig davon wieviele Nullen vorher dort waren und an welcher Position sie sich befinden.

Neutral General 1. Aug 2018 14:55

AW: führende null entfernen
 
@Delphi.Narium: Deine Simulation stimmt nicht ganz, weil er bei i=2 mit break rausspringen würde, weil '8' <> '0'

KodeZwerg 1. Aug 2018 14:57

AW: führende null entfernen
 
In Unit JclStrings könnte man
Delphi-Quellcode:
StrTrimCharLeft('00850046', '0');
aufrzufen um einen "850046" String zu erhalten, ansonsten schließe ich mich Dalei an, hier ein mini Beispiel dazu:
Delphi-Quellcode:
function EntferneNullen(const Input: String): String;
begin
  Result := IntToStr(StrToIntDef(Input,0));
end;

SProske 1. Aug 2018 14:57

AW: führende null entfernen
 
Wenn die Version im Profil stimmt, könnte man das natürlich auch über

Delphi-Quellcode:
nr_pzn_bereinigt := nr_pzn_bereinigt.TrimLeft(['0']);
lösen

Delphi.Narium 1. Aug 2018 15:00

AW: führende null entfernen
 
Zitat:

Zitat von Neutral General (Beitrag 1409364)
@Delphi.Narium: Deine Simulation stimmt nicht ganz, weil er bei i=2 mit break rausspringen würde, weil '8' <> '0'

Ja schon, und deshalb fällt der Fehler nicht auf. Wenn man mal ohne break arbeitet, sieht man, dass man auch mittendrinnen ggfls. noch die eine oder andere 0 entfernen würde, was dann den Fehlergrund offensichtlich machen würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 5  1 23     Letzte »    

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