Search code examples
vb.nettextlinelimitwords

Limit each line in text file to X amount of words


Hi I am trying to make a program with VB.NET that opens a text file, capitalizes the first letter of each line, limits each line to 7 words or less, and then puts each line into a list box. For example it would take a string of text like this:

  • w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14

and turn it into two separate lines like this:

  • W1 w2 w3 w4 w5 w6 w7
  • W8 w9 w10 w11 w12 w13 w14

This is the code I have right now to read each line and capitalize the first letter of the line into the list box

Try
        Dim reader As New System.IO.StreamReader(filePath)

        Dim textLine As String = ""

        Do While reader.Peek <> -1

            textLine = reader.ReadLine

            textLine = textLine.Substring(0, 1).ToUpper + textLine.Substring(1)

            MAIN_FORM.previewBox.Items.Add(textLine)

        Loop

        reader.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

Now I just need to figure out how to break each line into 7 words or less.

Any help on this would be greatly appreciated.


Solution

  • A bit of Linq could help a lot....

    Dim count As Integer = 7
    Dim pos As Integer = 0
    Do While reader.Peek <> -1
    
        textLine = reader.ReadLine
    
        ' Split the line to the individual words
        Dim parts = textLine.Split(" "c)
        do
            ' Skip the previous words and take the count required
            Dim block = parts.Skip(pos).Take(count).ToArray()
    
            ' position to read the next count words
            pos = pos + count
    
            if block.Count > 0 Then
                block(0) = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(block(0))
            end if
            MAIN_FORM.previewBox.Items.Add(string.Join(" ", block))
       Loop While(pos < parts.Length)
    Loop
    

    EDIT: Not sure to have tested every edge case, but this should work for any length