Чтение текстового файла и вывод нескольких строк в текстовое поле - PullRequest
0 голосов
/ 03 ноября 2010

Я пытаюсь прочитать текстовый файл с несколькими строками и затем отобразить его в текстовом поле.Проблема в том, что моя программа читает только одну строку.Может кто-нибудь указать мне на ошибку?

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
            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

Вот пример текстового файла:

Банановый орех
Черника
Корица
Яйцо
Обычная
Маковое
Тыквенное
Рожь
Соль
Кунжутное семя

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Вы, вероятно, получаете только последнюю строку в файле, верно? Ваш код устанавливает TextBox1.Text равным BagelSteramReader.ReadLine () каждый раз, перезаписывая предыдущее значение TextBox1.Text. Попробуйте TextBox1.Text += BagelStreamReader.ReadLine() + '\n'

Редактировать: Хотя я должен украсть согласиться с прокомментированной идеей Ганса Пассанта об этом; Если вам нужен более эффективный алгоритм, File.ReadAllLines () даже экономит ваше время и деньги ... хотя я сам не знал об этом. Черт возьми .NET, имея так много возможностей ...

0 голосов
/ 16 июня 2011

Я написал программу для записи и чтения из текстового файла. Чтобы записать строки списка в текстовый файл, я использовал следующий код:

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

И для чтения и записи содержимого текстового файла и записи в многострочное текстовое поле (вам просто нужно установить свойство нескольких строк текстового поля в true), я использовал следующий код. Мне также пришлось выполнить дополнительное кодирование, чтобы отделить отдельные слова от длинной строки, которую я получил из текстового файла.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...