Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   String in gleichgroße Teile teilen (https://www.delphipraxis.net/157031-string-gleichgrosse-teile-teilen.html)

DarkItachi 25. Dez 2010 18:52

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

Aphton 25. Dez 2010 18:57

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;

DarkItachi 25. Dez 2010 19:09

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;

alzaimar 26. Dez 2010 05:56

AW: String in gleichgroße Teile teilen
 
Beim leeren String liefert die Funktion ein falsches Resultat.

himitsu 26. Dez 2010 11:04

AW: String in gleichgroße Teile teilen
 
nimm eine While-Schleife und statt
Delphi-Quellcode:
i := (Length(sInp) div aLimit) + 1;
if aLimit = Length(sInp) then
  dec(i);
SetLength(Result, i);
lieber
Delphi-Quellcode:
i := (Length(sInp) + aLimit - 1) div aLimit;
SetLength(Result, i);
[add]
Delphi-Quellcode:
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;
PS: Delphi-Referenz durchsuchenTStringDynArray


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