Как прочитать определенную строку из текстового файла в VB

Вопрос: Я создаю программу, которая должна писать текст в текстовый файл, и должна иметь возможность читать определенные строки из текстового файла в VB (поэтому, если мне нужно было прочитать определенное имя, я мог бы выбрать строку 5, и он будет отображаться в текстовое поле). Я могу прочитать текст из текстового файла, но я не знаю,

Вопрос:

Я создаю программу, которая должна писать текст в текстовый файл, и должна иметь возможность читать определенные строки из текстового файла в VB (поэтому, если мне нужно было прочитать определенное имя, я мог бы выбрать строку 5, и он будет отображаться в текстовое поле). Я могу прочитать текст из текстового файла, но я не знаю, как управлять определенной строкой.

Вот мой код:

Public Class Form1 Private Sub btnSubmit_Click(sender As System.Object, e As System.EventArgs) Handles btnSubmit.Click Dim writer As New System.IO.StreamWriter(«/text.txt», True) writer.WriteLine(txtFirstName.Text) writer.WriteLine(txtLastName.Text) writer.WriteLine(«————————————-«) writer.Close() End Sub Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click Dim reader As New System.IO.StreamReader(«/text.txt») Dim FirstName, LastName As String FirstName = reader.ReadLine() LastName = reader.ReadLine() reader.Close() txtFirstName.Text = FirstName txtLastName.Text = LastName End Sub Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click txtFirstName.Clear() txtLastName.Clear() End Sub End Class

Любая помощь будет оценена по достоинству. Благодарю!

Лучший ответ:

Вам нужно будет прочитать все строки до того, что вам интересно. Например:

Function ReadLineWithNumberFrom(filePath As String, ByVal lineNumber As Integer) As String Using file As New StreamReader(filePath) ‘ Skip all preceding lines: ‘ For i As Integer = 1 To lineNumber — 1 If file.ReadLine() Is Nothing Then Throw New ArgumentOutOfRangeException(«lineNumber») End If Next ‘ Attempt to read the line you’re interested in: ‘ Dim line As String = file.ReadLine() If line Is Nothing Then Throw New ArgumentOutOfRangeException(«lineNumber») End If ‘ Succeded! Return line End Using End Function

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

Если вам часто требуется загрузить определенную строку, у вас есть еще несколько вариантов:

  • Загрузите полный текстовый файл в память, например, используя File.ReadAllLines(«Foobar.txt»). Это возвращает массив String() которому вы можете напрямую обращаться по номеру строки.

  • Создайте индекс номера строки вручную. То есть, обрабатывайте текстовый файл по строкам и заполняйте Dictionary(Of Integer, Integer) по ходу дела. Клавиши – номера строк, а значения – смещения файлов. Это позволяет вам. .Seek право на начало определенной строки, не сохраняя весь файл в памяти.

Ответ №1

Попробуй это:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim reader As New System.IO.StreamReader(«C:text.txt») Dim allLines As List(Of String) = New List(Of String) Do While Not reader.EndOfStream allLines.Add(reader.ReadLine()) Loop reader.Close() txtFirstName.Text = ReadLine(5, allLines) txtLastName.Text = ReadLine(6, allLines) End Sub Public Function ReadLine(lineNumber As Integer, lines As List(Of String)) As String Return lines(lineNumber — 1) End Function

Если у вас есть файл с этим:

Line 1 Line 2 Line 3 Line 4 My Name My LastName

ваше текстовое поле будет иметь имя “My Name”, а ваше текстовое поле LastName будет иметь “My LastName”.

Ответ №2

Это очень просто, попробуйте следующее:

Dim strLineText As String Dim intLineNumber As Integer LineNumber=3 myLine = File.ReadAllLines(«D:text.txt»).ElementAt(LineNumber).ToString Ответ №3

Еще один вариант

Private Function readNthLine(fileAndPath As String, lineNumber As Integer) As String Dim nthLine As String = Nothing Dim n As Integer Try Using sr As StreamReader = New StreamReader(fileAndPath) n = 0 Do While (sr.Peek() >= 0) And (n < lineNumber) sr.ReadLine() n += 1 Loop If sr.Peek() >= 0 Then nthLine = sr.ReadLine() End If End Using Catch ex As Exception Throw End Try Return nthLine End Function

Оцените статью
Добавить комментарий