AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String zerlegen ab einer bestimten länge aber auf...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Bauer007 · begonnen am 19. Mär 2008 · letzter Beitrag vom 19. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#1

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

  Alt 19. Mär 2008, 15:27
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
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#2

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

  Alt 19. Mär 2008, 15:29
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...
Jonas
  Mit Zitat antworten Zitat
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 19. Mär 2008, 15:33
Hmmm werde wohl mir mal weiter drüber gedanken machen müssen
Sebastian
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

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

  Alt 19. Mär 2008, 15:47
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;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

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

  Alt 19. Mär 2008, 15:52
Hi,

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

Freundliche Grüße
  Mit Zitat antworten Zitat
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#6

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

  Alt 19. Mär 2008, 15:57
Danke @marabu .... so leicht und doch so fern!

DANKE!
Sebastian
  Mit Zitat antworten Zitat
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#7

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

  Alt 19. Mär 2008, 16:15
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?
Sebastian
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 19. Mär 2008, 16:18
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
Heiko
  Mit Zitat antworten Zitat
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#9

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

  Alt 19. Mär 2008, 16:20
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
S := WrapText(OLD_MESSAGE, #13#10 + '> ', ['.', ' ', #9, '-'], 50);
Sebastian
  Mit Zitat antworten Zitat
Bauer007

Registriert seit: 17. Sep 2007
Ort: Husum
56 Beiträge
 
Delphi XE2 Professional
 
#10

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

  Alt 19. Mär 2008, 16:32
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
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:40 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