开发者

Read Text File and Output Multiple Lines to a Textbox

开发者 https://www.devze.com 2023-01-23 14:34 出处:网络
I\'m trying to read a text file with multiple lines and then display it in a textbox. The problem is that my program only reads one line. Can someone point out the mistake to me?

I'm trying to read a text file with multiple lines and then display it in a textbox. The problem is that my program only reads one line. Can someone point out the mistake to me?

Imports System.IO
Imports Microsoft.VisualBasic.FileIO

Public Class Form1

    Private BagelStreamReader As StreamReader
    Private PhoneStreamWriter As StreamWriter
    Dim ResponseDialogResult As DialogResult

    Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click

        'Dim PhoneStreamWriter As New StreamWriter(OpenFileDialog1.FileName)

        'Is file already open
        If PhoneStreamWriter IsNot Nothing Then
            PhoneStreamWriter.Close()
        End If

        With OpenFileDialog1
            .InitialDirectory = Directory.GetCurrentDirectory
            .FileName = OpenFileDialog1.FileName
            .Title = "Select File"
            ResponseDialogResult = .ShowDialog()
        End With

        'If ResponseDialogResult <> DialogResult.Cancel Then
        '    PhoneStreamWriter = New StreamWriter(OpenFileDialog1.FileName)
        'End If

        Try
            BagelStreamReader = New StreamReader(OpenFileDialog1.FileName)
            DisplayRecord()
        Catch ex As Exception
            开发者_Go百科MessageBox.Show("File not found or is invalid.", "Data Error")
        End Try  
    End Sub

    Private Sub DisplayRecord()

        Do Until BagelStreamReader.Peek = -1
            TextBox1.Text = BagelStreamReader.ReadLine()
        Loop

        'MessageBox.Show("No more records to display.", "End of File")
        'End If
    End Sub

    Private Sub SaveToolStripMenuItem_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles SaveToolStripMenuItem.Click

        With SaveFileDialog1
            .InitialDirectory = Directory.GetCurrentDirectory
            .FileName = OpenFileDialog1.FileName
            .Title = "Select File"
            ResponseDialogResult = .ShowDialog()
        End With

        PhoneStreamWriter.WriteLine(TextBox1.Text)
        With TextBox1
            .Clear()
            .Focus()
        End With
        TextBox1.Clear()
    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click

        Dim PhoneStreamWriter As New StreamWriter(OpenFileDialog1.FileName)
        PhoneStreamWriter.Close()
        Me.Close()

    End Sub
End Class

Here is a sample textfile:

Banana nut

Blueberry

Cinnamon

Egg

Plain

Poppy Seed

Pumpkin

Rye

Salt

Sesame seed


You're probably only getting the last line in the file, right? Your code sets TextBox1.Text equal to BagelSteramReader.ReadLine() every time, overwriting the previous value of TextBox1.Text. Try TextBox1.Text += BagelStreamReader.ReadLine() + '\n'

Edit: Though I must steal agree with Hans Passant's commented idea on this; If you want an more efficient algorithm, File.ReadAllLines() even saves you time and money...though I didn't know of it myself. Darn .NET, having so many features...


I wrote a program to both write to and read from a text file. To write the lines of a list box to a text file I used the following code:

Private Sub txtWriteToTextfile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWriteToTextfile.Click

    Dim FileWriter As StreamWriter

        FileWriter = New StreamWriter(FileName, False)

        ' 3. Write some sample data to the file.
        For i = 1 To lstNamesList.Items.Count
            FileWriter.Write(lstNamesList.Items(i - 1).ToString)
            FileWriter.Write(Chr(32))
        Next i

        FileWriter.Close()

End Sub

And to read and write the contents of the text file and write to a multi-line text box (you just need to set the multiple lines property of a text box to true) I used the following code. I also had to do some extra coding to break the individual words from the long string I received from the text file.

Private Sub cmdReadFromTextfile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReadFromTextfile.Click
    Dim sStringFromFile As String = ""
    Dim sTextString As String = ""
    Dim iWordStartingPossition As Integer = 0
    Dim iWordEndingPossition As Integer = 0
    Dim iClearedTestLength As Integer = 0

    Dim FileReader As StreamReader


        FileReader = New StreamReader(FileName)

        sStringFromFile = FileReader.ReadToEnd()

        sTextString = sStringFromFile

        txtTextFromFile.Text = ""

        Do Until iClearedTestLength = Len(sTextString)

            iWordEndingPossition = CInt(InStr((Microsoft.VisualBasic.Right(sTextString, Len(sTextString) - iWordStartingPossition)), " "))

            txtTextFromFile.Text = txtTextFromFile.Text & (Microsoft.VisualBasic.Mid(sTextString, iWordStartingPossition + 1, iWordEndingPossition)) & vbCrLf

            iWordStartingPossition = iWordStartingPossition + iWordEndingPossition

            iClearedTestLength = iClearedTestLength + iWordEndingPossition

        Loop

        FileReader.Close()


End Sub
0

精彩评论

暂无评论...
验证码 换一张
取 消