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 2  1 2      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#1

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
 
#2

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
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#3

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
SProske

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

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
Dr. Jack

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

AW: führende null entfernen

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

nr_pzn_bereinigt := nr_pzn_bereinigt.TrimLeft(['0']); lösen
genau Trimleft super. danke das war die Lösung! Daumen hoch!
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: führende null entfernen

  Alt 1. Aug 2018, 16:25
Ich habe auch noch etwas herumgespielt, sowas kam dabei raus:
Delphi-Quellcode:
function RemLeadChar(const Input: string; const LeadChar: Char): string;
var
  i, ii: Integer;
begin
  ii := 0;
  if Length(Input) > 0 then // ein zeichen minimum um weiter zu kommen
   if Input[1] = LeadChar then // fängt String nicht mit LeadChar an gibts nichts zu tun
    for i := 1 to Length(Input) do // komplette stringlänge abarbeiten initialisieren
      if Input[i] = LeadChar then ii := i else Break; // kommt vorne ein LeadChar vor Position merken
    if ii > 0 then Result := Copy(Input, ii+1, Length(Input)) // entweder anfang verwerfen
     else Result := Input; // oder eingabe zurück
end;
Beispiel Aufruf: Memo1.Lines.Add(RemLeadChar(Edit1.Text,'0'));
Gruß vom KodeZwerg
  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, 16:30
Wie wärs einfach hiermit?
Delphi-Quellcode:
function RemLeadChar(const Input: string; const LeadChar: Char): string;
begin
  if Length(Input) > 0 then
  begin
    Result := Input;
    while (Result[1] = LeadChar) do
      delete(Result, 1, 1);
  end
  else
    Result := '';
end;
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
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#8

AW: führende null entfernen

  Alt 1. Aug 2018, 16:38
oder
Delphi-Quellcode:
function RemLeadChar(const Input: string; const LeadChar: Char): string;
begin
  Result := Input;
  if Length(Result) > 0 then while Result[1] = LeadChar do delete(Result, 1, 1);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: führende null entfernen

  Alt 1. Aug 2018, 16:39
Btw: Das mehrfache Delete ist ziemlich imperformant. Ich würde erstmal in einer Schleife die Stelle der ersten nicht-Null suchen und danach per Delete alles bis zu diesem Index am Stück entfernen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: führende null entfernen

  Alt 1. Aug 2018, 16:42
Das ist ja das schöne bei Delphi, jeder kann seine persönliche Note einbringen
Müssen viele LeadChars entfernt werden ist mein Vorschlag bestimmt nen takken schneller ^_^

Mini Upgrade vs Leerstrings
Delphi-Quellcode:
function RemLeadChar(const Input: string; const LeadChar: Char): string;
var
  i, ii: Integer;
begin
  ii := 0;
  if Length(Input) > 0 then // ein zeichen minimum um weiter zu kommen
   if Input[1] = LeadChar then // fängt String nicht mit LeadChar an gibts nichts zu tun
    for i := 1 to Length(Input) do // komplette stringlänge abarbeiten initialisieren
      if Input[i] = LeadChar then ii := i else Break; // kommt vorne ein LeadChar vor Position merken
  if ii > 0 then Result := Copy(Input, ii+1, Length(Input)) // entweder anfang verwerfen
   else Result := Input; // oder eingabe zurück
  if Result = 'then Result := LeadChar; // falls input leer oder nur aus LeadChars bestand, gib wenigstens ein LeadChar zurück
end;
und noch ein Vorschlag zu dem While Delete
Delphi-Quellcode:
function RemDelLeadChar(const Input: string; const LeadChar: Char): string;
var
  i: Integer;
begin
  i := 1;
  Result := Input;
  if ((Length(Input) > 0) and (Input[1] = LeadChar)) then
  begin
    while (Input[i] = LeadChar) do inc(i);
    Delete(Result, 1, i-1);
  end;
  if Result = 'then Result := LeadChar;
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 1. Aug 2018 um 17:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz