Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string inkrementieren (https://www.delphipraxis.net/160798-string-inkrementieren.html)

Namenloser 5. Jun 2011 19:38

AW: string inkrementieren
 
Darf ich auch noch mal? :stupid:
Delphi-Quellcode:
function PadLeft(const S: AnsiString; const ResultLength: integer; const PadChar: AnsiChar = '0'): AnsiString;
begin
  if ResultLength <= 0 then
    Result := ''
  else
  begin
    SetLength(Result, ResultLength);
    if Length(S) < ResultLength then
      FillChar(Result[1], ResultLength-Length(Zahl), PadChar);
    if Length(S) > 0 then
      Move(S[1], Result[ResultLength-Length(Zahl)+1], Length(S));
  end;
end;

himitsu 5. Jun 2011 20:09

AW: string inkrementieren
 
Seit Delphi 2009 (Unicode) kann man nicht mehr über
Delphi-Quellcode:
FillChar(Result[1], ..., PadChar);
ein Char mehrfach reinschreiben, da FillChar mit Bytes und nicht mit Words (oder mehr) arbeitet.
Intern würde es schon gehn, aber es nimmt nur ein Byte vom Parameter entgegen.

Und beim Unicode würden überall auch nur 50% der Bytes koppiert/geschrieben.

So
Delphi-Quellcode:
function PadLeft(const S: AnsiString; ResultLength: Integer; PadChar: AnsiChar = '0'): AnsiString;
würde es aber weiterhin funktionieren. :stupid:

Coffeecoder 6. Jun 2011 08:49

AW: string inkrementieren
 
Zitat:

Zitat von himitsu (Beitrag 1104723)
Delphi-Quellcode:
temp := '0' + temp;
in einer Schleife = Aua
Delphi-Quellcode:
result := temp;
- Warum nicht gleich Result verwenden? (Wir sind hier nicht in C, wo das zuweisen des Results [return] die Funktion verläßt)
Aber statt Temp hätte man auch Zahl verändern können (solange man den Parameter nicht als CONST übergibt)
Delphi-Quellcode:
while (...) do
- Delphi kommt mit wesentlich weniger Klammern aus.

Und dann noch völlig unnötige Leerzeilen entfernt (hier machen die ja nichts übersichtlicher) und schon kommt man von 13 auf 6 Code-Zeilen.
Delphi-Quellcode:
function ErweiternFuehrendeNull(const Zahl: String; Laenge: Integer): String;
begin
  Result := Zahl;
  while Length(Result) < Laenge do
    Include('0', Result, 1); //Result := '0' + Result; ist aber dennoch nicht viel besser (Aua)
end;
Delphi-Quellcode:
function ErweiternFuehrendeNull(const Zahl: String; Laenge: Integer): String;
begin
  Result := DupeString('0', Laenge - Length(Zahl)) + Zahl;
end;
PS: Nicht wundern, aber "Zahl soll Länge lang werden", also hab ich die Parameter getauscht.

Danke für deine Verbesserung :thumb:
Ich sag immer jeder kann von jedem lernen! :)


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

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