我正在创建一个程序,应该将文本写入文本文件,并且应该能够从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
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢!
sta*_*ica 10
您必须阅读所有您感兴趣的行.例如:
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
Run Code Online (Sandbox Code Playgroud)
这是因为文本行是可变长度记录,并且无法猜测特定行开始处的确切文件偏移量 - 而不是没有索引.
如果您经常需要加载特定的行,您还有更多选择:
将完整的文本文件加载到内存中,例如使用File.ReadAllLines("Foobar.txt")
.这将返回一个String()
数组,您可以通过行号直接访问该数组.
手动创建行号索引.也就是说,逐行处理文本文件,并随时填写Dictionary(Of Integer, Integer)
.键是行号,值是文件偏移量.这使您可以.Seek
直接到特定行的开头,而无需将整个文件保留在内存中.
尝试这个:
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
Run Code Online (Sandbox Code Playgroud)
如果你有这样的文件:
Line 1
Line 2
Line 3
Line 4
My Name
My LastName
Run Code Online (Sandbox Code Playgroud)
您的姓名文本框将包含“我的名字”,而您的姓氏文本框将包含“我的姓氏”。
归档时间: |
|
查看次数: |
83582 次 |
最近记录: |