Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String zerlegen ab einer bestimten länge aber auf... (https://www.delphipraxis.net/110530-string-zerlegen-ab-einer-bestimten-laenge-aber-auf.html)

Bauer007 19. Mär 2008 14:27


String zerlegen ab einer bestimten länge aber auf...
 
Moin Moin,


Ich habe einen String, der ab einer bestimmten Länge 90 Zeichen einen Zeilenumbruch erleiden soll aber dabei soll auf Wörter geachtet werden - das heisst nicht einfach das wort teilen sondern dann je nach dem hinter oder vor dem Wort den Zeilenumbruch.
Nun da steh ich nun und habe kein Plan....

Gefunden habe ich auch nicht wirklich etwas... oder ich suchte nach den falschen Wörtern....
Hat jemand eine idee für mich?
Klar ich denke mittels POS/PosEX.... aber hmmmm

Aurelius 19. Mär 2008 14:29

Re: String zerlegen ab einer bestimten länge aber auf...
 
Grundgedanke:
Du musst mit Pos() nach Leerezeichen im String suchen, wenn das dann eine Zahl >= 90 zurückgibt musst du den Zeilenumbruch einfügen. Bedenke aber dass Pos() immer nur den ersten Substring zurückgibt. Wie das mit PosEx aussieht weiß ich net...

Bauer007 19. Mär 2008 14:33

Re: String zerlegen ab einer bestimten länge aber auf...
 
Hmmm werde wohl mir mal weiter drüber gedanken machen müssen

alzaimar 19. Mär 2008 14:47

Re: String zerlegen ab einer bestimten länge aber auf...
 
Eigentlich nicht schwer:
Das erste Zeichen in der Zeile ist im String an Position X.
Setze X1 := X + 90. Dann gehe so lange von X1 aus gesehen rückwärts, bist du im String ein Leerzeichen gefunden hast (oder bei X angelangt bist, dann hast Du ein verdammt langes Wort auf der Zeile).

Sei X1 nun die Position des Leerzeichens. Nun brichst Du die Zeile an Position X1+1 (das Leerzeichen bleibt noch auf der Zeile) und setzt anschließend X = X1+1. Dann kannst Du weiter machen.

Delphi-Quellcode:
Procedure BreakLongString (Const aString : String; aStringList : TStringList; aMaxLength : Integer);
Var
  X,X1, XEnd : Integer;

Begin
  X := 1;
  XEnd := Length (aString);
  While X < XEnd Do Begin
    X1 := Min (Xend, X+90);
    If X1<XEnd Then Begin
      While (X1>X) And (aString[X1]<>' ') Do Dec (X1);
      If X1 = X Then X1 := X + 90;
    End;
    aStringList.Add(Copy (aString,X,X1-X+1));
    X := X1+1;
  End
End;
Ungetestet, aber so könnte es klappen;

marabu 19. Mär 2008 14:52

Re: String zerlegen ab einer bestimten länge aber auf...
 
Hi,

auch D5 kennt die Funktion WrapText() - in der Unit SysUtils.

Freundliche Grüße

Bauer007 19. Mär 2008 14:57

Re: String zerlegen ab einer bestimten länge aber auf...
 
Danke @marabu .... so leicht und doch so fern! :-)

DANKE!

Bauer007 19. Mär 2008 15:15

Re: String zerlegen ab einer bestimten länge aber auf...
 
Kommando zurück!
Ich lade Texte aus dem Internet.
Da scheint es Probleme mit der WrapText() Funktion zu geben.
Es gibt texte die werden zerlegt - und dann gibt es Texte wo WrapText nicht greift - passiert nichts!
Die Texte sind aber augenscheinlich normal!

Jemand eine Idee?

hoika 19. Mär 2008 15:18

Re: String zerlegen ab einer bestimten länge aber auf...
 
Hallo,

dann häng doch einfach mal so einen Text hier an.
So aufs Blaue #13#10 Umbruch unter Windows #10 Umbruch Unix (oder war es #13 ?).


Heiko

Bauer007 19. Mär 2008 15:20

Re: String zerlegen ab einer bestimten länge aber auf...
 
Zitat:

Zitat von hoika
Hallo,

dann häng doch einfach mal so einen Text hier an.
So aufs Blaue #13#10 Umbruch unter Windows #10 Umbruch Unix (oder war es #13 ?).


Heiko


Würde ich gerne aber es handelt sich um PrivateNachrichten als keine öffentliche Texte...
Ausserdem denke ich das dadurch sicher das was daran schuld ist verloren geht!

Sehe ein das ich dadurch nicht gerade hilfreich bin!


mach es so
Delphi-Quellcode:
S := WrapText(OLD_MESSAGE, #13#10 + '> ', ['.', ' ', #9, '-'], 50);

Bauer007 19. Mär 2008 15:32

Re: String zerlegen ab einer bestimten länge aber auf...
 
ok hier der Text scheint erstmal nur dieser zu sein:


Zitat:

c't ist im Moment nur online Werbung über heise.de
Da es Software ist, die im Consumerbereich angewandt wird, sind die üblichen Verdächtigen an PC-Zeitschriften da eher sinnvoll.
Wenn du was an Magazinen benötigst, dann gib mal Laut. Wir bekommen ständig die Belegexemplare, teilweise sogar doppelt. Ich habe hier zwar einen kleinen Verteilerkreis, der davon profitiert. Aber da scheint es wohl schon zuviel zu sein, dass sie sich die Zeitschriften selbst abholen. Also wandern sie irgendwann in die Tonne.
Aber ich weiss nicht ob er dann noch "funktioniert"
Also ich habe ihn von der Webseite so kopiert und in das RichEdit eingefügt und dann die WrapText laufen lassen und nichts passierte! - nehme ich andere geht es


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 2  1 2      

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