让VB读取文本文件中的某个区域,更改并保存

时间:2014-04-10 20:34:48

标签: vb.net

我希望我的程序读取一个巨大的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重复此操作?我不是一个编码传奇,但这已经困扰了我多年了:(

1 个答案:

答案 0 :(得分:1)

这里有一些问题需要考虑。如果您正在处理大型文本文件作为&#34;数据库&#34;并且您希望仅编辑其中的一部分而不影响其他部分,然后您可能希望将其编辑为二进制文件而不是文本流。然而,这有几个缺点,因为这意味着你必须知道你的记录有多大,并处理填充等事情。

如果你可以节省磁盘IO和RAM(我不知道当你说巨大时你的意思有多大),简单地将整个文件加载到数组或List(Of String)中可能要容易得多,找到代表该人的线,在你想要的字段下面寻找几行(你说文化),在数组或列表中更改该字段,然后将整个数组或列表重新保存回文本文件。这样可以很容易地进行插入,你不必担心填充,大多数情况下你只需要担心行结尾和文件编码(以及磁盘IO和RAM的数量)

最后,我建议使用自定义格式的文本文件作为数据库通常是一个错误的&#34;在2014年的想法,除非你有真的有充分理由这样做。您的格式与JSON非常相似 - 也许您可以考虑使用它而不是现有格式。然后会有像JSON.Net这样的库来帮助你做正确的事情,你不需要做任何自定义IO代码。