parsing string, leaving words intact

M

meldrape

Hello,

I need to parse a long string into no more than 30
character chunks, but I also need to leave the words
intact. Right now, I am using:

For intStart = 1 to Len(strOriginal) by 30
strPrint = Mid$(strOriginal, intStart, 30)
Print #detailFile, Tab(1), intStart, Tab(4), strPrint
Next intStart

and it's fine, but splits up some of the words. If I
could figure out how to find the preceding space of the
30 limit, I'd be in good shape. Any thoughts would be
appreciated. Many thanks in advance.
 
D

dlbjr

Set SP = New StringParser
SP.SetString "This is a test of the string parsing system",30
arrChunks = SP.GetChunks
Set SP = Nothing
For i = 0 To UBound(arrChunks)
msgbox arrChunks(i)
Next

Class StringParser
Private mintCounter
Private mintBreak
Private marrData
Private mDic

Private Sub Class_Initialize()
mintBreak = 0
mintCounter = 0
Set mDic = CreateObject("Scripting.Dictionary")
End Sub

Private Sub Class_Terminate()
Set mDic = Nothing
End Sub

Public Function GetChunks()
GetChunks = mDic.Items
End Function

Public Sub SetString(strData,intChunkLength)
strData = Trim(strData)
If IsNumeric(intChunkLength) Then
mintBreak = Abs(intChunkLength) \ 1
End If
If Len(strData) > 0 And mintBreak > 0 Then
marrData = Split(strData," ")
For i = 0 To UBound(marrData)
strItem = marrData(i)
If Len(strChunk) + Len(strItem) <= mintBreak Then
strChunk = Trim(strChunk & " " & strItem)
Else
AddChunk strChunk
strChunk = strItem
End If
Next
End If
AddChunk strChunk
End Sub

Private Sub AddChunk(strChunk)
If Len(strChunk) > 0 Then
mintCounter = mintCounter + 1
mDic.Add mintCounter,strChunk
End If
End Sub
End Class


-dlbjr

Discerning resolutions for the alms
 
R

Ray at

Here's a vb SCRIPT way.

<%
TheString = "I need to parse a long string into no more than 30 character
chunks, but I also need to leave the words intact. Right now, I am using
and it's fine, but splits up some of the words. If I could figure out how
to find the preceding space of the 30 limit, I'd be in good shape. Any
thoughts would be appreciated. Many thanks in advance."

'''clear out any double+ spaces
Do While Instr(TheString, " ") > 0
TheString = Replace(TheString, " ", " ")
Loop

aParts = Split(TheString, " ")
Redim Preserve aParts(29)

For q = 0 To 29
Response.Write aParts(q) & "<br>"
Next
%>

Ray at home
 
R

Ray at

I think I mis-read your question. Sorry about that. I thought you wanted
the first 30 words.

Ray at home
 
C

Chris Hohmann

meldrape said:
Hello,

I need to parse a long string into no more than 30
character chunks, but I also need to leave the words
intact. Right now, I am using:

For intStart = 1 to Len(strOriginal) by 30
strPrint = Mid$(strOriginal, intStart, 30)
Print #detailFile, Tab(1), intStart, Tab(4), strPrint
Next intStart

and it's fine, but splits up some of the words. If I
could figure out how to find the preceding space of the
30 limit, I'd be in good shape. Any thoughts would be
appreciated. Many thanks in advance.

<%
Const s = "Pneumonoultramicroscopicsilicovolcanoconiosis is the longest
word in the English dictionary. For those that are interested, it's a
disease of the lungs which is caused by silica dust.
123456789012345678901234567890"
Dim re,arr
Set re = New RegExp
re.Global = True
re.Pattern = "\S{30}|.{1,29}(\s|$)"
Set matches = re.execute(s)
Response.Write "<pre>"
For Each match in matches
Response.Write vbTab & match.FirstIndex & vbTab & vbTab & vbTab & vbTab
& match.Value & vbCRLF
Next
Response.Write "</pre>"
%>

Modifying the code to write to a file instead of to the browser is left
as an exercise for the reader.

HTH
-Chris Hohmann
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top