AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

führende null entfernen

Ein Thema von Dr. Jack · begonnen am 1. Aug 2018 · letzter Beitrag vom 2. Aug 2018
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Dr. Jack

Registriert seit: 17. Mär 2010
78 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

führende null entfernen

  Alt 1. Aug 2018, 15:40
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?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: führende null entfernen

  Alt 1. Aug 2018, 15:45
Ja, macht er wahrscheinlich auch, direkt bei StringElement[0] wo die Länge des Strings drin steht.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: führende null entfernen

  Alt 1. Aug 2018, 15:47
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
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: führende null entfernen

  Alt 1. Aug 2018, 15:51
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#5

AW: führende null entfernen

  Alt 1. Aug 2018, 15:53
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)
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#6

AW: führende null entfernen

  Alt 1. Aug 2018, 15:54
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) = '0do 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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: führende null entfernen

  Alt 1. Aug 2018, 15:55
@Delphi.Narium: Deine Simulation stimmt nicht ganz, weil er bei i=2 mit break rausspringen würde, weil '8' <> '0'
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: führende null entfernen

  Alt 1. Aug 2018, 15:57
In Unit JclStrings könnte man 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;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: führende null entfernen

  Alt 1. Aug 2018, 15:57
Wenn die Version im Profil stimmt, könnte man das natürlich auch über

nr_pzn_bereinigt := nr_pzn_bereinigt.TrimLeft(['0']); lösen
Sebastian
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#10

AW: führende null entfernen

  Alt 1. Aug 2018, 16:00
@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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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