AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String in gleichgroße Teile teilen

Ein Thema von DarkItachi · begonnen am 25. Dez 2010 · letzter Beitrag vom 26. Dez 2010
Antwort Antwort
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#1

String in gleichgroße Teile teilen

  Alt 25. Dez 2010, 19:52
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
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: String in gleichgroße Teile teilen

  Alt 25. Dez 2010, 19:57
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;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: String in gleichgroße Teile teilen

  Alt 25. Dez 2010, 20:09
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;
Developer since age 14

Geändert von DarkItachi (25. Dez 2010 um 21:05 Uhr)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: String in gleichgroße Teile teilen

  Alt 26. Dez 2010, 06:56
Beim leeren String liefert die Funktion ein falsches Resultat.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: String in gleichgroße Teile teilen

  Alt 26. Dez 2010, 12:04
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Dez 2010 um 12:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz