删除TXT文件中的行但保留其他所有内容

时间:2011-03-23 15:01:18

标签: vb.net visual-studio-2010 file-io

嘿所有我想找到一种方法来删除文本文件中的内容,但保留它周围的一切。

这方面的一个例子是:

SDfmifgn349234024jn4tnge0b04tnEFGm34tmn34t0egonkerglnk
318erg4nergpERGhmboergn4t34tmg054
fg94t34tskmsdglnEGgjr894ERG94mrg34tSDFS$45352ty
GGreerkg0gm4m505556g0fdg6555fbd105f1g

并说我想删除 318erg4nergpERGhmboergn4t34tmg054 ,因此它会被保存为:

SDfmifgn349234024jn4tnge0b04tnEFGm34tmn34t0egonkerglnk
fg94t34tskmsdglnEGgjr894ERG94mrg34tSDFS$45352ty
GGreerkg0gm4m505556g0fdg6555fbd105f1g

但我无法知道如何去做!

我在下面尝试了以下代码:

    Dim dir As New DirectoryInfo(defaultNetworkDrive)

            For Each file As FileInfo In dir.GetFiles()
                If file.Extension = ".txt" Then
                    Dim ioFile As New StreamReader(defaultNetworkDrive & file.Name)

                    Dim ioLine As String ' Going to hold one line at a time
                    Dim ioLines As String ' Going to hold whole file
                    ioLine = ioFile.ReadLine
                    ioLines = ioLine

                    While Not ioLine = ""
                        ioLine = ioFile.ReadLine
                        ioLines = ioLines & vbCrLf & ioLine
                    End While

                    MsgBox(ioLines) 'SHOWS all the lines in the TXT file

                    If InStr(1, ioLines, encryptedText, vbTextCompare) <> 0 Then
                        MsgBox("True")
                    Else
                        MsgBox("False")
                    End If

                    'Dim sw As StreamWriter = file.CreateText("input.txt")
                    'sw.Write(ioLines)
                    'sw.Close()

                    ioFile.Close()
                End If
            Next

我确实发现及其 TRUE 但我不知道如何删除该行然后保存它

任何帮助都会很棒! :O)

大卫

4 个答案:

答案 0 :(得分:5)

您必须重写该文件。使用StreamWriter创建临时文件。一次读一行并将其写入输出文件。如果您不想要该行,请跳过写入。通过重命名原件进行清理,重命名临时,然后删除重命名的原件。

如果速度太慢,请使用比文本文件更好的内容,例如dbase。

答案 1 :(得分:3)

您需要检查要在读取行的循环内排除的字符串:

While Not ioLine = ""
  ioLine = ioFile.ReadLine
  If ioLine <> "318erg4nergpERGhmboergn4t34tmg054" then
    ioLines = ioLines & vbCrLf & ioLine
  End
End While

答案 2 :(得分:1)

嗯,也许我找到了答案。

您将所有线路连接在一起:

ioLines = ioLines & vbCrLf & ioLine

稍后您尝试查找搜索字符串,但仅限于组合行的开头!

ioLines.StartsWith(encryptedText)

如果它出现在文件的第一行,它只能找到 encryptedText 。 在您的示例中,相关字符串位于 iolines 字符串中间的某处。 所以你应该尝试使用     ioLines.Contains(encryptedText) 代替。

编辑:

您可以尝试执行以下操作(只是一段时间,我还没有测试过它)

Dim fileLines as List(Of String)
fileLines = new List(Of String)(File.ReadAllLines(yourFileNameHere))

For i as Integer = fileLines.Count To 0 Step -1
  If fileLines(i).Contains(encryptedText) Then
    fileLines(i).RemoveAt(i)
  End If
Next
File.WriteAllLines(yourFileNameHere, fileLines.ToArray)

HTH

答案 3 :(得分:1)

If ioLines.StartsWith(encryptedText) Then
    MsgBox("True")
Else
    MsgBox("False")
End If

您正在检查'文件'(ioLines)是否以加密文本开头,而不是行(ioLine)。我怀疑这就是它找不到它的原因。 我不确定您是否打算这样做,但我认为将vbCrLf添加到ioLines会导致每行之间出现空行。所以你的文件输出将是

LINE
[empty line]
LINE
[empty line]
...

要保存没有该行的文件,您需要将要保存的行写入新文件。

Read line from file
If not excluded line
    write line

类似的东西(显然不在我的头顶):)