» Start & Installation » ASP-Grundlagen » VBScript » Datenbanken » Erweiterte Techniken » Fehlercode-Suche » FAQ » Forum für aspfehlercodes » ASP » JavaScript » ASCII & ANSI » HTTP-Statuscodes » Codepage » LCID » VBScript » JScript
|
Link: Wichtiger Hinweis in eigener Sache!
| Autor: Klaus Keller | Erstellt am: 2005-08-01 | Aufrufe: 6261 |
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 |
|
|