我希望我的程序读取一个巨大的txt文件的某个部分,更改一个值并再次保存该文件。 需要编辑的文件如下所示:
168575 = {
name="Hidda"
female=yes
dynasty=9601
religion="catholic"
culture="german"
father=168573
960.1.1 = {
birth=yes
}
1030.1.1 = {
death=yes
}
}
我的VB程序从其他文本框中获取必须更改的块中的ID。
31060
106551
106550
168575
40713
106523
106522
106555
正如您所看到的,我想要更改的数字位于文本框的中间,我用来从行中获取数字并在巨大文件中查找它的代码是
Dim strText() As String
strText = Split(chars.Text, vbCrLf)
以后
If line.Contains(strText(0) & " = {") Then
TextBox1.AppendText(line & Environment.NewLine)
形成如下代码:
Dim strText() As String
strText = Split(chars.Text, vbCrLf)
Label4.Text = strText(0)
Dim line As String = Nothing
Dim lines2 As Integer = 0
Using reader2 As New StreamReader("c:/dutch.txt")
While (reader2.Peek() <> -1)
line = reader2.ReadLine()
If line.Contains(strText(0) & " = {") Then
TextBox1.AppendText(line & Environment.NewLine)
End If
lines2 = lines2 + 1
Label2.Text = lines2
End While
End Using
当然,这只会在文本框中写入它找到的行,如何从1个文本框中获取具有该ID的整个代码,将文化更改为另一个值并再次保存?并对文本框中的所有ID重复此操作?我不是一个编码传奇,但这已经困扰了我多年了:(
答案 0 :(得分:1)
这里有一些问题需要考虑。如果您正在处理大型文本文件作为&#34;数据库&#34;并且您希望仅编辑其中的一部分而不影响其他部分,然后您可能希望将其编辑为二进制文件而不是文本流。然而,这有几个缺点,因为这意味着你必须知道你的记录有多大,并处理填充等事情。
如果你可以节省磁盘IO和RAM(我不知道当你说巨大时你的意思有多大),简单地将整个文件加载到数组或List(Of String)中可能要容易得多,找到代表该人的线,在你想要的字段下面寻找几行(你说文化),在数组或列表中更改该字段,然后将整个数组或列表重新保存回文本文件。这样可以很容易地进行插入,你不必担心填充,大多数情况下你只需要担心行结尾和文件编码(以及磁盘IO和RAM的数量)
最后,我建议使用自定义格式的文本文件作为数据库通常是一个错误的&#34;在2014年的想法,除非你有真的有充分理由这样做。您的格式与JSON非常相似 - 也许您可以考虑使用它而不是现有格式。然后会有像JSON.Net这样的库来帮助你做正确的事情,你不需要做任何自定义IO代码。