嘿所有我想找到一种方法来删除文本文件中的内容,但保留它周围的一切。
这方面的一个例子是:
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)
大卫
答案 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
类似的东西(显然不在我的头顶):)