在VB6中,我正在寻找一种方法,如果该行包含一些字符串,则从文本文件中删除一行文本。我主要用C#工作,我在这里不知所措。使用.NET有几种方法可以做到这一点,但我很幸运,他必须维护一些旧的VB代码。
有办法做到这一点吗?
由于
答案 0 :(得分:5)
假设您在变量sFileName
中有文件名:
Dim iFile as Integer
Dim sLine as String, sNewText as string
iFile = FreeFile
Open sFileName For Input As #iFile
Do While Not EOF(iFile)
Line Input #iFile, sLine
If sLine Like "*foo*" Then
' skip the line
Else
sNewText = sNewText & sLine & vbCrLf
End If
Loop
Close
iFile = FreeFile
Open sFileName For Output As #iFile
Print #iFile, sNewText
Close
您可能希望输出到其他文件而不是覆盖源文件,但希望这会让您更接近。
答案 1 :(得分:4)
从某些角度来看,好的文本文件是一个复杂的野兽:你不能删除一行并向后移动更多的文本,它是一个流。
我建议您改为考虑输入到输出方法:
1)您以文本
打开输入文件2)你打开第二个文件输出,一个临时文件。
3)你遍历文件A中的所有行。
4)如果当前行包含我们的字符串,请不要写它。如果当前行没有 包含我们的字符串,我们将其写在文件B中。
5)关闭文件A,关闭文件B.
现在您可以添加一些步骤。
6)删除文件A
7)将文件B移到先前文件A位置。
答案 2 :(得分:-3)
DeleteLine "C:\file.txt", "John Doe", 0,
Function DeleteLine(strFile, strKey, LineNumber, CheckCase)
'Use strFile = "c:\file.txt" (Full path to text file)
'Use strKey = "John Doe" (Lines containing this text string to be deleted)
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objFile, Count, strLine, strLineCase, strNewFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
If CheckCase = 0 Then strLineCase = UCase(strLine): strKey = UCase(strKey)
If LineNumber = objFile.Line - 1 Or LineNumber = 0 Then
If InStr(strLine, strKey) Or InStr(strLineCase, strKey) Or strKey = "" Then
strNewFile = strNewFile
Else
strNewFile = strNewFile & strLine & vbCrLf
End If
Else
strNewFile = strNewFile & strLine & vbCrLf
End If
Loop
objFile.Close
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.Write strNewFile
objFile.Close
End Function