繁体   English   中英

让VB读取文本文件中的特定区域,对其进行更改并保存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM