![]() |
AW: String vorne mit Nullen auffüllen
@mytbo: statt Result.Create besser string.Create verwenden.
Du erzeugst einen neuen String und mit dem Result hat es eigentlich garnichts zu tun, abgesehn von dem Typ dieser Variable. Funktionell geht es hier zwar, aber syntaktisch ist es eher fragwürdig missverständlich und in anderen Fällen auch fehleranfällig. Zum Glück ist es hier aber kein schlimmer "Fehler". Anders sieht es z.B. bei dem anderen syntaktisch gleichen Problem aus, wo es bei sowas ganz böse knallen kann/wird. MyClass.Create anstatt TMyClass.Create aka Variable.Create anstatt Class.Create, weil hier kommt der Typ aus dem, auf was die Variable zeigt und nicht aus der Variablen-Deklaration selber. @Walter: In mytbo's Code, entspricht die Schleife dem StringOfChar bzw string.Create und die ganze Funktion entspricht dem PadLeft. Vorallem die Schleife, bzw. die unnötig vielen String-Operationen darin, sind eher suboptimal. Man kann es machen, aber man kann auch die manuellen Codes durch etwas ersetzen, was es bereits fertig gibt. (vor allem, da Diese hier sogar optimaler arbeiten) |
AW: String vorne mit Nullen auffüllen
Zitat:
Bis bald... Thomas |
AW: String vorne mit Nullen auffüllen
Zitat:
|
AW: String vorne mit Nullen auffüllen
Upss. (ein Zwerg)
Joar, aber der String heißt "Nummer" :lol: OK, fast überall ist er dennoch ein String. |
AW: String vorne mit Nullen auffüllen
Zitat:
Zitat:
Delphi-Quellcode:
Rein historisch betrachtet ist es sehr schnell.
function FillString(const AString: AnsiString; const AChar: AnsiChar; const ALength: Integer): AnsiString;
var Len: Integer; begin Len := ALength - Length(AString); // padding "berechnen" if (Len > 0) then // kurzer check begin SetLength(Result, ALength); // länge setzen FillChar(Result[1], Len, AChar); // padding einfügen Move(AString[1], Result[Succ(Len)], Length(AString)); // zusammenfügen end else Result := AString; // das original so belassen end; Ich bete das mir da kein Fehler unterlaufen ist :twisted: |
AW: String vorne mit Nullen auffüllen
Das mit dem Fillchar und dem String war mir beim schreiben ganicht aufgefallen, ist aber natürlich korrekt. Fillchar darf hier nicht verwendet werden. Da gibt es eine andere Funktion "StringOfChar()" dafür:
Delphi-Quellcode:
function FillString(const AString: String; AChar: Char; ALength: integer): String;
var i:integer; begin Result := StringOfChar(AChar, ALength); Result := copy(AString, 1, ALength) + copy(Result, ALength - Length(AString), ALength); end; |
AW: String vorne mit Nullen auffüllen
Zitat:
Zitat:
Delphi-Quellcode:
Das klappt dann nebenbei auch mit UnicodeString.
function FillString(const AString: AnsiString; const AChar: AnsiChar; const ALength: Integer): AnsiString;
var Len: Integer; begin Len := ALength - Length(AString); Result := StringOfChar(AChar, Len) + AString; end; |
AW: String vorne mit Nullen auffüllen
@Dennis07 Weil meine AnsiString Variante um ein dutzendfach schneller ist.
|
AW: String vorne mit Nullen auffüllen
per se ist AnsiString und String/UnicodeString gleich schnell, bzüglich der Speicherverwaltung, da sie intern identisch sind.
Man darf nur nicht das *2 bzw. *SizeOf(WideChar) vergessen Wenn mann will, dann kann man in einen AnsiString auch Unicode rein tun (CP_UTF16) und andersrum auch ANSI in einen UnicodeString (auch wenn ich Letzteres nicht empfehlen würde). |
AW: String vorne mit Nullen auffüllen
Zitat:
//edit und der AnsiChar sollte dann natürlich ein WideChar bzw nur Char sein |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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-2025 by Thomas Breitkreuz