ASP 101 - Active Server Pages 101 wordwrap.aspx
<%@ Page Language="VB" %>
<script runat="server">
	Sub Page_Load(sender As Object, e As EventArgs)
		' Declare the variables to store the original text and the
		' text after we word wrap it.
		Dim strTextPreWrap  As String
		Dim strTextPostWrap As String
		Dim intWrapPosition As Integer
		' Here's the text we're going to be using for illustration.
		strTextPreWrap = "The quick brown fox jumps over the lazy dog.  " _
		     & "The quick brown fox jumps over the lazy dog again.  " _
		     & "The quick brown fox jumps over the lazy dog one more time."
		' Pass the text to our Wrapping function and save the result
		' to the new variable.  I'm using the number 40 as the default.
		' I'm not going to build a form and all that stuff so that the
		' code stays simple, but I will let you enter a number on the
		' querystring if you want to play around with different values.
		intWrapPosition = CInt(Request.QueryString("wrap"))
		If intWrapPosition = 0 Then intWrapPosition = 40
		' Call our function
		strTextPostWrap = WordWrap(strTextPreWrap, intWrapPosition)
		' Notice I've used <p><code></code></p> for display.  This gives
		' you the mono-spaced type, but doesn't word wrap at vbCrLf
		' characters.  I've used it instead of a <pre></pre> because I
		' didn't want the original line to scroll off to the right in
		' the browser.  As such I had to compensate and convert the
		' vbCrLf's to <br />'s so you could see the result in the browser.
		' The call to AddBrToCrLf isn't needed when outputting text
		' to a non-HTML environment like an email or text file and it
		' doesn't do anything on the non-wrapped text, but I used it on
		' both so no one accused me of doing anything funny in it.
		litPreWrap.Text  = AddBrToCrLf(strTextPreWrap)
		litPostWrap.Text = AddBrToCrLf(strTextPostWrap)
		litWrapChars.Text = intWrapPosition
	End Sub
	' Here's the function that does the work.  It takes a string
	' to word wrap and a maximum line length and returns the
	' string wrapped appropriately.
	Function WordWrap(strTextToBeWrapped As String, intMaxLineLength As Integer) As String
	     Dim strWrappedText As String            ' Result storage
	     Dim intLengthOfInput As Integer         ' Length of original
	     Dim intCurrentPosition As Integer       ' Where we're at now
	     Dim intCurrentLineStart As Integer      ' Where the current line starts
	     Dim intPositionOfLastSpace As Integer   ' Last space we saw
	     ' Get this once so we don't have to keep checking
	     intLengthOfInput = Len(strTextToBeWrapped)
	     ' Start both of these at the beginning
	     intCurrentPosition = 1
	     intCurrentLineStart = 1
	     ' Loop through until we get to the end
	     Do While intCurrentPosition < intLengthOfInput
	          ' If the current position is a space, make a note of
	          ' its location for later use.
	          If Mid(strTextToBeWrapped, intCurrentPosition, 1) = " " Then
	               intPositionOfLastSpace = intCurrentPosition
	          End If
	          ' If we're at what should be the end of a line, we go back
	          ' to the last space we saw and cut the line there.
	          If intCurrentPosition = intCurrentLineStart + intMaxLineLength Then
	               ' Some debugging lines if something's not lining up.
	               'Response.Write intCurrentLineStart & "<br />"
	               'Response.Write intPositionOfLastSpace & "<br />"
	               'Response.Write Trim(Mid(strTextToBeWrapped, intcurrentLineStart, _
	               '     intPositionOfLastSpace - intCurrentLineStart + 1)) & "<br />"
	               ' Append this latest line to our result
	               strWrappedText = strWrappedText _
	                    & Trim(Mid(strTextToBeWrapped, intcurrentLineStart, _
	                    intPositionOfLastSpace - intCurrentLineStart + 1)) _
	                    & vbCrLf
	               ' Reset the next line's starting point to the point we
	               ' used for the last one's end + 1.
	               intCurrentLineStart = intPositionOfLastSpace + 1
	               ' Remove any leading spaces that might mess up our
	               ' character count.  If you want to just pull off one,
	               ' switch this to a simple If conditional instead of
	               ' looping.
	               Do While Mid(strTextToBeWrapped, intCurrentLineStart, 1) = " "
	                    intCurrentLineStart = intCurrentLineStart + 1
	               Loop
	          End If
	          ' Increment our location indicator.
	          intCurrentPosition = intCurrentPosition + 1
	     Loop
	     ' Since the loop ends before we add the remaining text,
	     ' add remaining text as the last line.
	     strWrappedText = strWrappedText & Trim(Mid(strTextToBeWrapped, _
	          intcurrentLineStart)) & vbCrLf
	     ' Return our result to the calling line.
	     WordWrap = strWrappedText
	End Function
	Function AddBrToCrLf(strInput As String) As String
	     AddBrToCrLf = Replace(strInput, vbCrLf, "<br />" & vbCrLf)
	End Function
</script>
<html>
<head>
<title>ASP.NET Word Wrap Sample</title>
</head>
<body>
<h3>The original string:</h3>
<p><code>
<asp:Literal id="litPreWrap" runat="server" />
</code></p>
<h3>The string word wrapped at <asp:Literal id="litWrapChars" runat="server" /> characters:</h3>
<p><code>
<asp:Literal id="litPostWrap" runat="server" />
</code></p>
<hr />
<p>
Click <a href="http://www.asp101.com/samples/wordwrap_aspx.asp">here</a>
to read about and download the source code.
</p>
</body>
</html>