Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

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)

p80286 1. Aug 2018 20:14

AW: führende null entfernen
 
Zitat:

Zitat von DeddyH (Beitrag 1409421)
Ich hätte mittels Schleife den Index des ersten Nicht-Null-Zeichens ermittelt und ab da einfach kopiert.

Da war irgendwas mit umkopieren der Daten in bereits allokierten Speicher (delete), aber unsere Assembler Freaks wissen da besser Bescheid.

Gruß
K-H

Neutral General 1. Aug 2018 20:18

AW: führende null entfernen
 
Zitat:

Zitat von p80286 (Beitrag 1409423)
Zitat:

Zitat von DeddyH (Beitrag 1409421)
Ich hätte mittels Schleife den Index des ersten Nicht-Null-Zeichens ermittelt und ab da einfach kopiert.

Da war irgendwas mit umkopieren der Daten in bereits allokierten Speicher (delete), aber unsere Assembler Freaks wissen da besser Bescheid.

Das ist doch was KodeZwerg als aller erstes gepostet hat oder nicht?

KodeZwerg 1. Aug 2018 20:18

AW: führende null entfernen
 
Zitat:

Zitat von DeddyH (Beitrag 1409421)
Ich hätte mittels Schleife den Index des ersten Nicht-Null-Zeichens ermittelt und ab da einfach kopiert.

Weicht Deine Methode von den gezeigten ab? (Vielleicht mittels Pointer-Operation fällt mir auf die schnelle noch ein)
Zitat:

Zitat von Neutral General (Beitrag 1409424)
Das ist doch was KodeZwerg als aller erstes gepostet hat oder nicht?

Ja. Das erschien mir die performanteste Umsetzung.
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 // den check kann man sich sparen
//   if Input[1] = LeadChar then // fängt String nicht mit LeadChar an gibts nichts zu tun // den check kann man sich sparen
    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;

DeddyH 1. Aug 2018 20:52

AW: führende null entfernen
 
Auf dem Tablet direkt im Editor getippt, daher komplett aus dem Kopf:
Delphi-Quellcode:
function StrippedLeft(const Input: String; const Leading: Char): String;
var
  i, idx: integer;
begin
  idx := 0;
  for i := 1 to Length(Input) do
    if Input[i] <> Leading then
      begin
        idx := i;
        Break;
      end;
  if idx > 0 then
    Result := Copy(Input, idx)
  else
    Result := ´´;
end;

KodeZwerg 1. Aug 2018 21:12

AW: führende null entfernen
 
Zitat:

Zitat von DeddyH (Beitrag 1409427)
Auf dem Tablet direkt im Editor getippt, daher komplett aus dem Kopf

Habe zwei überflüssige checks entfernt, nun schauts sogut wie gleich aus, ich geh halt mit break und worauf es reagiert anders um.

Rollo62 2. Aug 2018 06:33

AW: führende null entfernen
 
Was spricht eigentlich gg. das offizielle TrimLeft (siehe dem akzeptierten Vorschlag von SProske ) ?

DeddyH 2. Aug 2018 06:48

AW: führende null entfernen
 
Gar nichts, aber die nötige Überladung ist ja AFAIK erst mit dem StringHelper eingeführt worden, ältere Delphi-Versionen dürften das noch nicht kennen.

Jasocul 2. Aug 2018 07:00

AW: führende null entfernen
 
Da mir nach meinem ersten Kaffee danach war:
Delphi-Quellcode:
function DelLeadStr(LeadStr : String; InpStr : String) : String;
var
  vLeadStr : String;
begin
  vLeadStr := LeadStr;
  while Pos(vLeadStr, InpStr) = 1 do
  begin
    vLeadStr := vLeadStr + LeadStr;
  end;
  Delete(InpStr, 1, Length(vLeadStr) - Length(LeadStr));
  Result := InpStr;
end;
Vorteil:
- Kein Zugriff per Index auf den String --> Damit leicht umstellbar auf WideString (oder kann man da auch über den Index zugreifen?)
- Keine Längenprüfung erforderlich
- Auch führende Strings (also nicht nur ein Zeichen) können behandelt werden
Nachteil:
- Vermutlich etwas langsamer

Neutral General 2. Aug 2018 08:32

AW: führende null entfernen
 
Man kann auch bei WideStrings ganz normal ohne Probleme über den Index zugreifen.

Jasocul 2. Aug 2018 09:49

AW: führende null entfernen
 
Zitat:

Zitat von Neutral General (Beitrag 1409460)
Man kann auch bei WideStrings ganz normal ohne Probleme über den Index zugreifen.

Danke für die Info


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 4 von 5   « Erste     234 5      

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