![]() |
Re: Text in 5er Buchstabengruppen anordnen
Mal so ganz grundsätzlich:
Man sollte die Aufgabe "Text in 5er Buchstabengruppen anordnen" nicht direkt auf den Labels ausführen sondern eine saubere Funktion schreiben.
Delphi-Quellcode:
Ohne eine eigene Funktion sieht der Sourcecode wie ein Haufen Müll aus; man weiss eine Woche später nicht mehr was da eigentlich gemacht wird.
function Mach5erGruppen(const text:string):string;
var i:integer; begin Result := text; for i := (Length(text) - 1) div 5 downto 1 do Insert(' ', result, i * 5 + 1); end; |
Re: Text in 5er Buchstabengruppen anordnen
Ok war noch ein ganz einfacher Logikfehler drin. Das ganze wird ja mehrmals auf den gleichen String losgelassen. Dabei zählt der dann bereits vorhandene Leerzeichen mit. So hier die funktionierende neue Fassung:
Delphi-Quellcode:
function buchstaben5ergruppen(const text: string): string;
var i: Integer; begin Result :=''; for i := 1 to Length(Text) do begin if text[i] <> ' ' then Result := Result + text[i]; end; for i := (Length(text)-1) div 5 downto 1 do begin Insert(' ', result, i*5 +1); mmotest.Text := mmotest.Text + Result; end; end; |
Re: Text in 5er Buchstabengruppen anordnen
Length(text) gibt noch die alte Länge, inkl. der Leerzeichen an, wärend die "neue" Länge nötig wäre.
Delphi-Quellcode:
function buchstaben5ergruppen(const text: string): string;
var i: Integer; begin Result := StringReplace(Text, ' ', '', [rfReplaceAll]); for i := (Length(Result) - 1) div 5 downto 1 do Insert(' ', Result, i * 5 + 1); end; |
Re: Text in 5er Buchstabengruppen anordnen
Wie wäre es denn so? Ich hab allerdings nicht sonderlich getestet, es kann also noch Fehler enthalten:
Delphi-Quellcode:
function GroupString(const text: string; CountPerGroup: integer;
EliminateSpaces: Boolean = true): string; var i, j: integer; begin SetLength(Result, Length(text) + Length(text) div CountPerGroup); j := 0; for i := 1 to Length(text) do if not EliminateSpaces or (text[i] <> ' ') then begin inc(j); Result[j] := text[i]; if Succ(j) mod Succ(CountPerGroup) = 0 then begin inc(j); Result[j] := ' '; end; end; SetLength(Result,j); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 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