asphelper.de - Tipps & Skripts - Überlange Worte teilen

Link: Wichtiger Hinweis in eigener Sache!


 Autor: Klaus Keller Erstellt am: 2005-08-01 Aufrufe: 6261 


 << Vorheriger Tipp Nächster Tipp >>



Tipp 82: Überlange Worte teilen



Inhalt dieser Seite:


Einführung
Vielleicht kennen Sie das aus Gästebüchern, in denen irgendwelche "Spaßvögel" sehr lange Wörter mit teils mehreren 100 Zeichen eintragen. Die Folge davon ist daß damit das Design stark beeinträchtigt wird. Auch im Gästebuch von asphelper.de ist dies bereits geschehen, daher wurde eine Funktion erstellt, welche derartige Aktionen unterbindet. Eine Frage im Forum macht deutlich, daß derartige Probleme teils häufig vorkommen.

In diesem Tipp werden Ihnen 2 Funktionen vorgestellt, die derartige überlange Worte in "handliche" Wortteile aufteilen. Zuerst die Funktion LineSplit. Die beiden Funktionen unterscheiden sich im Ergebnis nur wenig bzw. ist im Ergebnis wohl das gleiche. Die erste Funktion LineSplit teilt den Text in Zeilen ein. Der Vorteil dabei ist daß diese Funktion besser in der Geschwindigkeit ist, denn die zweite Funktion, WordSplit, teilt den Text in jedes einzelne Wort ein.

Aber was ist, wenn man den Text gar nicht verändern möchte und nur feststellen möchte ob zu lange Worte im Text enthalten sind? Auch dazu finden Sie eine Funktion auf dieser Seite.

Die Funktion LineSplit
Die erste vorgestellte Funktion prüft ob in einer Zeile mindestens ein Leerzeichen vorkommt, falls nicht, wird ein Leerzeichen eingefügt.
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Function LineSplit(ByRef strText, ByRef LineLength)
    Dim Shorttext, PosEmptySign, index, sTextNew, bNoBreak, BreakSign
    bNoBreak = false
    sTextNew = ""
    BreakSign = " "
    
    If len(strText) > 0 Then
        For index = 1 To Len(strText)
            Shorttext = mid(strText, index, LineLength)
            PosEmptySign = instrrev(Shorttext, " ",-1)
            If PosEmptySign > 0 then
                sTextNew = sTextNew & left(Shorttext, PosEmptySign)
                index = index + PosEmptySign - 1
            Else
                sTextNew = sTextNew & left(Shorttext, LineLength) & BreakSign
                index = index + LineLength - 1
                bNoBreak = true
            End If
        Next
    End if
    If bNoBreak Then
        LineSplit = sTextNew
    Else
        LineSplit = strText
    End If
End Function


Der Funktionsaufruf ist sehr einfach:
Dim sText
sText = "HalloWelt"
sText = LineSplit(sText, 5)
Response.Write(sText)



Die Funktion WordSplit
Diese Funktion überprüft jedes einzelne Wort auf deren Maximalen Länge. Der wesentliche Unterschied zur Funktion LineSplit liegt in der Prüfungsmethode, denn die Funktion LineSplit prüft nur ganze Zeilen und ist damit effizienter. Vor allem bei sehr viel Text wird der Unterschied deutlich. Sind es nur ein paar Zeilen, ist der Unterschied gering. Das Ergebnis jedoch ist das gleiche, auch wenn die Funktion WordSplit jedes einzelne Wort untersucht und damit genauer arbeitet.
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Public Function WordSplit(ByRef strText, ByRef WordLength)
    dim arrText, BreakSign, strTextNew, bNoBreak
    dim index, LengthChecked, strTempText, index2

    bNoBreak = False
    sTextNew = ""
    BreakSign = " "
    
    If Len(strText) > 0 And Not IsNull(strText) Then
        arrText = Split(strText, " ")
        If UBound(arrText) > 0 Then
            For index = 0 To UBound(arrText)
                If Len(arrText(index)) > WordLength Then
                    strTempText = arrText(index)
                    LengthChecked = False
                    index2 = 1
                    arrText(index) = ""
                    
                    Do While Not LengthChecked
                        arrText(index) = arrText(index) & _
                                            Mid( _
                                                 strTempText, _
                                                 (index2 * WordLength) - _
                                                   WordLength + 1, _
                                                  WordLength _
                                                ) & " "
                        If Len(strTempText) > WordLength Then
                            strTempText=Right(strTempText,Len(strTempText)-WordLength)
                        Else
                            LengthChecked = True
                        End If
                    Loop
                    arrText(index) = Left(arrText(index), Len(arrText(index)) - 1)
                End If
            Next
            strTextNew = Join(arrText, " ")
        Else
            strTempText = strText
            LengthChecked = False
            index2 = 1
            strTextNew = ""
            
            Do While Not LengthChecked
                strTextNew = strTextNew & Mid( _
                                              strTempText, _
                                              (index2 * WordLength) - _
                                              WordLength + 1, _
                                              WordLength _
                                              ) & " "
                If Len(strTempText) > WordLength Then
                    strTempText=Right(strTempText, Len(strTempText)-WordLength)
                Else
                    LengthChecked = True
                End If
            Loop
            strTextNew = Left(strTextNew, Len(strTextNew) - 1)
        End If
    Else
        strTextNew = ""
    End If
    WordSplit = strTextNew
End Function


Auch für die Funktion Wordsplit gilt: Der Funktionsaufruf ist sehr einfach:
Dim sText
sText = "HalloWelt"
sText = WordSplit(sText, 5)
Response.Write(sText)



Die Prüffunktion HasLongWords
Mal angenommen, es soll nur geprüft werden, ob zu lange Worte enthalten sind, um z.B. dann eine Fehlermeldung oder eine Warnmeldung auszugeben. Natürlich könnte man nun die Länge vom Originaltext und von LineSplit oder WordSplit vergleichen. Bei einem Unterschied ist dann klar, hier gibt es mind. ein zu langes Wort. Aber das ist wenig performanent. Besser ist es, eine einfachere Prüffunktion wie HasLongWords einzusetzen. Damit kann man in einer besseren Geschwindidkeit die notwendige Prüfung durchführen.
1   
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function HasLongWords(ByRef strText, ByRef WordLength)
    Dim arrText, BreakSign, bNoBreak, index
    bNoBreak = False
    BreakSign = " "
    
    If Len(strText) > 0 And Not IsNull(strText) Then
        arrText = Split(strText, " ")
        If UBound(arrText) > 0 Then
            For index = 0 To UBound(arrText)
                If Len(arrText(index)) > WordLength Then
                    bNoBreak = true
                    exit for
                End If
            Next
        Else
            bNoBreak = (Len(strText) > WordLength)
        End If
    Else
        bNoBreak = false
    End If
    HasLongWords = bNoBreak
End Function


Natürlich noch der Funktionsaufruf:
Dim sText
sText = "HalloWelt"
if HasLongWords(sText, 5) then
    Response.Write("Zu langes Wort")
else
    Response.Write("Alles OK")
end if




 << Zum vorherigen Tipp 81:
Windows 2003 und Problem bei Verzeichnissen mit der Tilde ~

 Zum nächsten Tipp 83 >>
Höhe und Breite von einem Bild ermitteln

top top
© Copyright By Klaus Keller, 2001-2008 - Alle Rechte vorbehalten.