![]() |
String in gleichgroße Teile teilen
Hallöchen!
Ich möchte einen sehr sehr langen String in gleichgroße Teile teilen... zum Beispiel den String 'Weihnachten sollte nicht jeden Tag sein!!' in diesen Stücken teilen: 1: Weih 2: nach 3: ten 4: soll 5: te n 6: icht 7: jed 8: e Ta 9: g se 10: in!! also jeder teil besteht nur aus vier Zeichen.. Ich habe schon einiges versucht, aber als ich den String wieder zusammensetzt habe, war er nicht mehr so wie am Anfang! Also, wie würdet ihr das machen... Mit einen string-array ist eigentlich schon logisch, aber ich meine, wie ihr am besten die Schleife ansetzen würdet.. Welche Funktion wäre dafür geeignet? Dankeschön Frohe Weihnachten übrigens, Mit freundlichen Grüßen, Julian Jäger |
AW: String in gleichgroße Teile teilen
Nicht jeder Text mit beliebiger Länge kann in 4 gleichgroße Teile geteilt werden (Nicht alle Zahlen sind durch 4 teilbar mit 0 Rest)
Zuerst würd ich einmal schauen, ob das der Fall ist: if Length(lpInput) mod 4 <> 0 then Exit; Weiters würde ich bei dieser Funktion als Result ein TStringArray (= Array of String) zurückliefern lassen, das eben diese Teile dann beinhaltet... Würde dann circa so ausschauen:
Delphi-Quellcode:
function SplitInto4Parts(const lpInput: String): TStringArray;
var i, j: Integer; begin SetLength( Result, 0 ); j := Length(lpInput); if j mod 4 <> 0 then Exit; j := j div 4; SetLength( Result, j ); for i := 0 to j-1 do Result[i] := Copy( lpInput, 1+4*i, 4 ); end; |
AW: String in gleichgroße Teile teilen
Warum denke ich nicht an so etwas leichtem??
Diesen Denkfehler werde ich ab sofort hassen :) Danke Aphton Edit: Die fertige Funktion für jemanden, der sie evt. braucht..:
Delphi-Quellcode:
type
TStrArray= array of string; function SplitintoLetterParts(sInp: String; aLimit: Integer): TStrArray; var i, j, b: Integer; begin b:= 1; j:= 0; i:= (Length(sInp) div aLimit) + 1; if aLimit= Length(sInp) then dec(i); SetLength(Result, i); Repeat Result[j]:= Copy(sInp, b, aLimit); Inc(b, aLimit); Inc(j); Until b> Length(sInp); end; |
AW: String in gleichgroße Teile teilen
Beim leeren String liefert die Funktion ein falsches Resultat.
|
AW: String in gleichgroße Teile teilen
nimm eine While-Schleife und statt
Delphi-Quellcode:
lieber
i := (Length(sInp) div aLimit) + 1;
if aLimit = Length(sInp) then dec(i); SetLength(Result, i);
Delphi-Quellcode:
[add]
i := (Length(sInp) + aLimit - 1) div aLimit;
SetLength(Result, i);
Delphi-Quellcode:
PS:
function SplitString(S: String; Limit: Integer): TStringDynArray;
var i: Integer; begin i := (Length(S) + Limit - 1) div Limit; SetLength(Result, i); while i > 0 do begin Dec(i); Result[i] := Copy(S, i * Limit + 1, Limit); end; end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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