AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

string inkrementieren

Ein Thema von Cogito · begonnen am 1. Jun 2011 · letzter Beitrag vom 6. Jun 2011
Antwort Antwort
Seite 4 von 4   « Erste     234
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#31

AW: string inkrementieren

  Alt 5. Jun 2011, 20:38
Darf ich auch noch mal?
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;

Geändert von Namenloser ( 5. Jun 2011 um 21:12 Uhr) Grund: Typen geändert in Ansi*, siehe unten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#32

AW: string inkrementieren

  Alt 5. Jun 2011, 21:09
Seit Delphi 2009 (Unicode) kann man nicht mehr über 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 function PadLeft(const S: AnsiString; ResultLength: Integer; PadChar: AnsiChar = '0'): AnsiString; würde es aber weiterhin funktionieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 5. Jun 2011 um 21:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#33

AW: string inkrementieren

  Alt 6. Jun 2011, 09:49
temp := '0' + temp; in einer Schleife = Aua
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)
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
Ich sag immer jeder kann von jedem lernen!
Coffeecoder
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 00:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf