Visual Basic 6 - Text nach bestimmter Zeichenzahl umbrechen

Das Forum für Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

Visual Basic 6 - Text nach bestimmter Zeichenzahl umbrechen

Beitragvon Cynthrax » Fr 24 Dez, 2004 00:03

Hallo liebe Leute,
Also ich möchte in VB6 folgendes bewerkstelligen:
Ich habe eine Textbox (Multiline = True), und nun will ich diesen großen Text den ich in einem String abspeichere, alle 53 Zeichen umbrechen. Also max. 53 Zeichen pro Zeile. (Wichtig: Nicht ganze Wörter trennen), also wenn er mitten in einem Wort trennen würde, dann soll er schon beim vorigen Wort trennen.

Wäre sehr hilfreich wenn mir jemand dieses Codestück hier reinschreiben könnte! Oder mal erklären wie ichs anstellen könnte.

Danke im voraus.

MfG Cyn
Cynthrax
Neu im Board
Neu im Board
 
Beiträge: 20
Registriert: Sa 25 Okt, 2003 13:04
Wohnort: Baden

Beitragvon dfx » Fr 24 Dez, 2004 09:44

pseudocode:

Code: Alles auswählen
oristring = "langer string ...";
outputstring = "";
while (length(oristring) > 53)) {
  pos = 53;
  while (pos >= 0 && mid(oristring, pos, 1) != " ") {
    pos = pos - 1;
  }
  if (pos == 0) {
    pos = 53;
  }
  outputstring = outputstring + left(oristring, pos);
  oristring = right(oristring, length(oristring) - pos);
  while (right(outputstring, 1) == " ") {
    outputstring = left(outputstring, length(outputstring) - 1);
  }
  while (left(oristring, 1) == " ") {
    oristring = right(oristring, length(oristring) - 1);
  }
  outputstring = outputstring + "\n";
}
outputstring = outputstring + oristring;


is sicher nicht die eleganteste lösung, sollte aber hinhaun... optimierungen sind je nach verwendeter sprache möglich.
xDSL unlimited 2.320 kbit/s
Bild
Bild
dfx
Board-User Level 3
Board-User Level 3
 
Beiträge: 1368
Registriert: Do 15 Jan, 2004 19:22
Wohnort: graz

Re: Visual Basic 6 - Text nach bestimmter Zeichenzahl umbrec

Beitragvon visudoer » Mi 02 Mär, 2005 21:43

Cynthrax hat geschrieben:Ich habe eine Textbox (Multiline = True), und nun will ich diesen großen Text den ich in einem String abspeichere, alle 53 Zeichen umbrechen. Also max. 53 Zeichen pro Zeile. (Wichtig: Nicht ganze Wörter trennen), also wenn er mitten in einem Wort trennen würde, dann soll er schon beim vorigen Wort trennen.


also ich versteh da was nicht. wennst in vb6 multiline=true hast, so wird dir in der textbox sowieso ein automatischer umbruch geboten. der hängt eben davon ab, (sprich: ab welcher pos. umgebrochen wird) wie laaaange 's textboxerl eben is. je nach pixel-länge hast den umbruch.

und was bringt dir "intern" im ram ein umbruch ausser dass du zusätzliche ressourcen benötigst? wozu? denkst du, du könntest in einem str-array, oder gar in einer collection, etwa schneller suchen als in einem str, der wesentl. weniger speicher benötigt?
"Dad, why are we hidding from the police?"
"They use emacs, we use vi, son."
visudoer
Neu im Board
Neu im Board
 
Beiträge: 9
Registriert: Mi 02 Mär, 2005 21:15

wrap it

Beitragvon visudoer » Do 03 Mär, 2005 09:11

word-wrap function (wozu auch immer die gut sein sollte)

Code: Alles auswählen
Function WordWrap$ (St$, Length)
   '
   '-- converts raw text into CrLf delimited lines.
   '
    Length = Length + 1
    St$ = Trim$(St$)
    Cr$ = Chr$(13)
    CrLf$ = Chr$(13) & Chr$(10)      ' or use vbCrLf (VB.net, VB6?)

    Do
        L = Len(NextLine$)
        S = InStr(St$, " ")
        C = InStr(St$, Cr$)

        If C Then
            If L + C <= Length Then
                Text$ = Text$ & NextLine$ & Left$(St$, C)
                NextLine$ = ""
                St$ = Mid$(St$, C + 1)
                GoTo LoopHere
            End If
        End If
        If S Then
            If L + S <= Length Then
                DoneOnce = True
                NextLine$ = NextLine$ & Left$(St$, S)
                St$ = Mid$(St$, S + 1)
            ElseIf S > Length Then
                Text$ = Text$ & CrLf$ & Left$(St$, Length)
                St$ = Mid$(St$, Length + 1)
            Else
                Text$ = Text$ & NextLine$ & CrLf$
                NextLine$ = ""
            End If
        Else
            If L Then
                If L + Len(St$) > Length Then
                    Text$ = Text$ & NextLine$ & CrLf$ & St$ & CrLf$
                Else
                    Text$ = Text$ & NextLine$ & St$ & CrLf$
                End If
            Else
                Text$ = Text$ & St$ & CrLf$
            End If
            Exit Do
        End If

LoopHere:

    Loop

    WordWrap$ = Text$

End Function
"Dad, why are we hidding from the police?"
"They use emacs, we use vi, son."
visudoer
Neu im Board
Neu im Board
 
Beiträge: 9
Registriert: Mi 02 Mär, 2005 21:15


Zurück zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste