Delphi-PRAXiS
Seite 2 von 5     12 34     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 15:02

AW: führende null entfernen
 
Zitat:

Zitat von SProske (Beitrag 1409366)
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

genau Trimleft super. danke das war die Lösung! Daumen hoch!

KodeZwerg 1. Aug 2018 15:25

AW: führende null entfernen
 
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:
Delphi-Quellcode:
Memo1.Lines.Add(RemLeadChar(Edit1.Text,'0'));

Neutral General 1. Aug 2018 15:30

AW: führende null entfernen
 
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;

Delphi.Narium 1. Aug 2018 15:38

AW: führende null entfernen
 
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;

Zacherl 1. Aug 2018 15:39

AW: führende null entfernen
 
Btw: Das mehrfache
Delphi-Quellcode:
Delete
ist ziemlich imperformant. Ich würde erstmal in einer Schleife die Stelle der ersten nicht-Null suchen und danach per
Delphi-Quellcode:
Delete
alles bis zu diesem Index am Stück entfernen.

jobo 1. Aug 2018 15:39

AW: führende null entfernen
 
Zitat:

Zitat von Neutral General (Beitrag 1409361)
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"

Ja, Du hast Recht, ich hab gepennt.

KodeZwerg 1. Aug 2018 15:42

AW: führende null entfernen
 
Das ist ja das schöne bei Delphi, jeder kann seine persönliche Note einbringen :love:
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;

Redeemer 1. Aug 2018 18:05

AW: führende null entfernen
 
for-Schleifen, die etwas löschen (wodurch die Nachfolger aufrücken), einfach immer mit downto machen. Klappt übrigens auch nicht mit for-in-Schleifen.

Neutral General 1. Aug 2018 18:15

AW: führende null entfernen
 
Zitat:

Zitat von Redeemer (Beitrag 1409399)
for-Schleifen, die etwas löschen (wodurch die Nachfolger aufrücken), einfach immer mit downto machen. Klappt übrigens auch nicht mit for-in-Schleifen.

"Einfach downto" ist in dem Fall aber leider nicht so einfach, weil er nur die '0'en am Anfang des Strings entfernen will und mit ner downto-Schleife ist es etwas problematisch festzustellen ob weiter vorne (nur) noch '0'en sind oder ob dazwischen jetzt noch ne andere Zahl kommt und man daher die aktuelle '0' nicht löschen darf.

KodeZwerg 1. Aug 2018 18:19

AW: führende null entfernen
 
Kann ich ein Beispiel bekommen wo der genannte Code nicht funktioniert? Ich habe es mit allerlei kram getestet ohne auf Fehler zu stossen. Ein Delete bzw Cut kommt bei mir ja auch nur einmal vor.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
Seite 2 von 5     12 34     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