[英]Let VB read certain area in text file, change it and save it
我希望我的程序读取一个巨大的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重复此操作吗? 我不是一个编码传奇,但这已经困扰了我很久了:(
这里有几个问题要考虑。 如果您将大型文本文件作为“数据库”处理,并且只希望编辑其中的一部分而不影响其他部分,那么您可能希望研究将其编辑为二进制文件而不是文本流。 但是,这样做有几个缺点,因为这意味着您必须知道自己的记录有多大,并要处理填充等问题。
如果您可以腾出磁盘IO和RAM(当您说大容量时我不知道您的意思是多大),将整个文件加载到数组或List(Of String)中可能会容易得多,请找到代表以下内容的行该人员,在您想要的字段(您所说的文化)的字段下寻找几行,在数组或列表中更改该字段,然后将整个数组或列表重新保存回文本文件。 这将使插入操作变得相当容易,并且您不必担心填充,大多数情况下,您只需要担心行尾和文件编码(以及磁盘IO和RAM的数量)。
最后,我建议在2014年使用自定义格式的文本文件作为数据库通常是一个“坏”主意,除非您确实有充分的理由这样做。 您的格式看起来与JSON非常相似-也许您可以考虑使用它来代替现有格式。 然后会有诸如JSON.Net之类的库来帮助您完成正确的事情,而您无需执行任何自定义IO代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.