![]() |
String vorne mit Nullen auffüllen
Hallo ich möchte ein String mit variabler Länge immer bis zur einer bestimmten Länge vorne mit 0 auffüllen. habe dazu folgende Function:
Delphi-Quellcode:
aufrufen der Function:
function FillString(AString: String; AChar: Char; ALength: integer): String;
var i:integer; begin FillChar(Result, ALength, Ord(AChar)); Result := copy(AString, 1, ALength) + copy(Result, ALength - Length(AString), ALength); end;
Delphi-Quellcode:
leider bekomme ich beim Aufruf der function eine Exception. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x0040e4c6: read of address 0x3030302c
BelegNr := FillString(BelegNr,'0',9);
was ist da falsch? |
AW: String vorne mit Nullen auffüllen
|
AW: String vorne mit Nullen auffüllen
1. Es gibt dafür bereits existierende Funktionen, die das machen.
2. In deinem Code schreibst du in einen nicht allozierten Speicher und erhälst dadurch die AV. Den Result String musst du zuerst entsprechend allozieren, bevor du da ein FillChar machst. Also einfach ein SetLength(Result, ALength) davor einfügen. 3. Mach aus dem ersten Parameter eine Const Parameter. Das solltest du für allen String Parameter machen, die du in der Funktinon nicht veränderst. Ohne const wird der String bei jedem Aufruf der Funktion kopiert, während er bei einem const als Pointer übergeben wird und die Zeit für das Kopierren gespart wird.
Delphi-Quellcode:
function FillString(const AString: String; AChar: Char; ALength: integer): String;
var i:integer; begin SetLength(Result, ALength); FillChar(Result, ALength, Ord(AChar)); Result := copy(AString, 1, ALength) + copy(Result, ALength - Length(AString), ALength); end; |
AW: String vorne mit Nullen auffüllen
Hallo Rolf,
habe die Function geändert aber die Exception kommt immer noch. |
AW: String vorne mit Nullen auffüllen
Wenn es keine fertige Funktion gibt, dann:
Delphi-Quellcode:
Bis bald...
function FillStringLeft(const pmcSource: String; pmChar: Char; pmStrLen: Integer): String;
begin if Length(pmcSource) >= pmStrLen then Result := pmcSource else Result := Result.Create(pmChar, pmStrLen - Length(pmcSource)) + pmcSource; end; var sBelegNr: String; begin sBelegNr := '12345'; ShowMessage(FillStringLeft(sBelegNr, '0', 9)); Thomas |
AW: String vorne mit Nullen auffüllen
Zitat:
|
AW: String vorne mit Nullen auffüllen
oder total oldschool:
Delphi-Quellcode:
function FillString(AString: String; AChar: Char; ALength: integer): String;
var i:integer; s: string; begin if Length(AString) > ALength then Exit(AString); s := ''; for i := 0 to Pred(ALength - Length(AString)) do s := s + AChar; Result := s + AString; end; |
AW: String vorne mit Nullen auffüllen
Weiß nicht mehr woher ich das habe, aber hier ein Einzeiler
Delphi-Quellcode:
function AddLeadingZeroes(const aNumber, aFinalLength: Integer): string;
begin Result := System.SysUtils.Format('%.*d', [aFinalLength, aNumber]); end; |
AW: String vorne mit Nullen auffüllen
Ja, hier ist nicht das Delphi-Char gemeint, sondern das Char der C-Welt und dort heißt es "Byte".
Bissl verwirrend. Früher hatte ich für sowas ![]() Wobei, wenn BelegNr eine "Nummer" ist, dann einfach dem ![]() [edit] @DieDolly: jupp. [/edit]
Delphi-Quellcode:
S := S.PadLeft(10, '0');
S := StringOfChar('0', 10 - Length(S)) + S; S := string.Create('0', 10 - S.Length) + S; // es geht auch andersrum, aber sowas will niemand machen S := Copy('0000000000', 1, 10 - Length(S)) + S; S := Copy('0000000000', Length(S) + 1) + S; |
AW: String vorne mit Nullen auffüllen
Danke an alle jetzt funktioniert es.
Function von mytbo habe ich jetzt benutzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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