![]() |
Der gute alte format Befehl
Ich habe z.B. einen integer, 1..59
bekomme ich es mit Format irgendwie gebacken das anstatt 1,2... es 01,02 ...09,10,11 ausgegeben wird. Doof zu formulieren diese Frage, Entschuldigt.:oops: |
AW: Der gute alte format Befehl
Delphi-Quellcode:
result := Format('%.2d', [Value]);
|
AW: Der gute alte format Befehl
Ja habe den Punkt vergessen
Danke |
AW: Der gute alte format Befehl
oder
Delphi-Quellcode:
function TwoDigits(const AValue: Integer; const DefDig: Char = '0'): String;
begin if AValue < 100 then begin Result := IntToStr( AValue ); if AValue div 10 > 0 then Result := DefDig + Result; end else // EDIT - Frage diesbezüglich - Siehe unten Result := ''; end; |
AW: Der gute alte format Befehl
Der Code sollte dir eine Warnung vom Compiler ausgeben, weil Result undefiniert ist, wenn AValue größer 100 ist.
|
AW: Der gute alte format Befehl
Hmm, ist es hier nicht sinnlos, da der Resultstring = '' ist?
|
AW: Der gute alte format Befehl
Nein, denn auch ein Leerstring ist ein Wert
|
AW: Der gute alte format Befehl
Der der String on Delphi automatisch initialisiert wird, kommt hier wohl keine Fehlermeldung.
Obwohl, es bei dem String als Result ein kleines Problem gibt, wodurch eine solche Meldung dennoch gut wäre :stupid: Ergo, auch das Result sollte man immer initialisieren, selbst wenn der Compiler nicht meckert.
Delphi-Quellcode:
function Add: String;
begin Result := Result + '*'; end; var s: String; for i := 1 to 10 do s := Add; ShowMessage(s);
Code:
**********
|
AW: Der gute alte format Befehl
Ich glaube das ATS3788 eine andere Frage hatte.
"Ich habe eine Zahlenfolge von 1 bis 59" Wie bekomme ich diese Ausgegeben in dem Format: 01,02,03...57,58,59 Als liegt Uwe schon mal richtig: Zitat:
Delphi-Quellcode:
1 bis 59 sieht stark nach Zeit aus.
var
i: integer; s: string; begin s:=''; for i:=1 to 59 do begin if i>1 then s:=s+','; s:=s+Format('%.2d', [i]); end; Wenn du mit Zeit arbeitest hat Delphi noch unterstützende Funktionen im Bauch. Dann melde dich hier noch einmal. |
AW: Der gute alte format Befehl
@himi: Huch, das war mir jetzt auch neu.
Ich bin zwar nie auf dieses Phänomen gestoßen, aber interessant, dass Result initialisiert wird und beim erneuten Aufruf der Funktion den vorigen Wert behält. |
AW: Der gute alte format Befehl
Nja, String, dynamische Arrays und Interfaces werden Initialisiert,
da hier Delphi die Speicherverwaltung übernimmt. Ohne Initialisierung würde Delphi ja nie wissen, ob es was freigeben muß. Beim String als Result, liegt dieses Problem darin behaftet, daß Delphi dieses intern in einen VAR-Parameter umwandelt.
Delphi-Quellcode:
sieht also eigentlich so aus
function Test(Param1: Integer): String;
Delphi-Quellcode:
.
procedure Test(Param1: Integer; var Result: String);
Der String selber wird also initialisiert, aber da eine interne lokale Variable an der aufrufenden Stelle genutzt wird, kommt es hier nun zu diesesm netten Phänomen. |
AW: Der gute alte format Befehl
Ohh gut das einmal bestätigt zu bekommen. Hab das letztens auch mal bemerkt.
Um auf der sicheren Seite zu sein, sollte man einfach alles initialisieren. Falls das sowieso automatisch gemacht wird, wird es codemäßig wahrscheinlich wegoptimiert. Von dem her kann man damit nichts falsch machen. MfG |
AW: Der gute alte format Befehl
Ich finde, man sollte sich nicht immer auf die compiler magic verlassen, bzw. sie herausfordern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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