Dim oFSO As FileSystemObject Dim oTextStream As TextStream Dim oFirstLine As String Dim i, LineNum As Integer Set oFSO = CreateObject("scripting.filesystemobject") Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForAppending, False, TristateFalse) oTextStream.Write (vbCrLf & "这是一个新增的测试行")'以下为删除某一行,如第二行 oTextStream.Close Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForReading, False, TristateFalse) Dim str(1000) As String '这里根据实际情况可增大或缩小数组的维数 i = 0 Do While oTextStream.AtEndOfLine <> True str(i) = oTextStream.ReadLine i = i + 1 Loop LineNum = i oTextStream.Close Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForWriting, False, TristateFalse) oTextStream.Write str(0) For i = 1 To LineNum - 1 If i <> 1 Then oTextStream.Write vbCrLf & str(i) End If Next i oTextStream.Close Set oFSO = Nothing
'删除c:\test.txt第N行 dim N as Long N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本 Dim TextLine as string Open "c:\test1.txt" For Input As #1 ' 打开文件副本 Open "c:\test.txt" For Output As #2 ' 重写文件 dim i as long Do While Not EOF(1) ' 循环至文件尾 i = i + 1 Line Input #1, TextLine ' 读入一行数据并将其赋予某变量 If Not N=i Then Print #1, TextLine'如果不是第N行,复制 Loop Close #1 ' 关闭文件 kill "c:\test1.txt"'删除副本
Option ExplicitPrivate Sub Command1_Click() Dim i As Long Dim DelIndex As Long Dim Str As String Dim sRet As String Dim Arr() As String
DelIndex = 5 Str = ReadFile("C:\Text.txt") If Len(Str) > 0 Then Arr = Split(Str, vbCrLf) For i = LBound(Arr) To UBound(Arr) If (i + 1) <> DelIndex Then sRet = sRet + Arr(i) End If Next End If WriteFile "c:\Text.txt", sRet End Sub '调用方法:WriteFile(文件的路径和文件名,写入的数据) Private Function WriteFile(ByVal pFile As String, ByVal inText As String) As Boolean On Error Resume Next Dim fN As Integer fN = FreeFile Open pFile For Output As #fN Put #fN, , inText Close #fN WriteFile = (Err.Number = 0) End Function '调用方法:ReadFile(文件的路径和文件名) Private Function ReadFile(pFile As String) As String Dim fN As Integer fN = FreeFile Open pFile For Binary Access Read As #fN ReadFile = Space(FileLen(pFile)) Get #fN, , ReadFile Close #fN End Function
哦,有错误,写文件的文件号2写成1了,写文件没有关闭,改正:'删除c:\test.txt第N行 dim N as Long N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本 Dim TextLine as string Open "c:\test1.txt" For Input As #1 ' 打开文件副本 Open "c:\test.txt" For Output As #2 ' 重写文件 dim i as long Do While Not EOF(1) ' 循环至文件尾 i = i + 1 Line Input #1, TextLine ' 读入一行数据并将其赋予某变量 If Not N=i Then Print #2, TextLine'如果不是第N行,复制 Loop Close #1 ' 关闭文件 Close #2 ' 关闭文件 kill "c:\test1.txt"'删除副本
Dim oTextStream As TextStream
Dim oFirstLine As String
Dim i, LineNum As Integer
Set oFSO = CreateObject("scripting.filesystemobject")
Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForAppending, False, TristateFalse)
oTextStream.Write (vbCrLf & "这是一个新增的测试行")'以下为删除某一行,如第二行
oTextStream.Close
Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForReading, False, TristateFalse)
Dim str(1000) As String '这里根据实际情况可增大或缩小数组的维数
i = 0
Do While oTextStream.AtEndOfLine <> True
str(i) = oTextStream.ReadLine
i = i + 1
Loop
LineNum = i
oTextStream.Close
Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForWriting, False, TristateFalse)
oTextStream.Write str(0)
For i = 1 To LineNum - 1
If i <> 1 Then
oTextStream.Write vbCrLf & str(i)
End If
Next i
oTextStream.Close
Set oFSO = Nothing
dim N as Long
N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本
Dim TextLine as string
Open "c:\test1.txt" For Input As #1 ' 打开文件副本
Open "c:\test.txt" For Output As #2 ' 重写文件
dim i as long
Do While Not EOF(1) ' 循环至文件尾
i = i + 1
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量
If Not N=i Then Print #1, TextLine'如果不是第N行,复制
Loop
Close #1 ' 关闭文件
kill "c:\test1.txt"'删除副本
Dim i As Long
Dim DelIndex As Long
Dim Str As String
Dim sRet As String
Dim Arr() As String
DelIndex = 5
Str = ReadFile("C:\Text.txt")
If Len(Str) > 0 Then
Arr = Split(Str, vbCrLf)
For i = LBound(Arr) To UBound(Arr)
If (i + 1) <> DelIndex Then
sRet = sRet + Arr(i)
End If
Next
End If
WriteFile "c:\Text.txt", sRet
End Sub
'调用方法:WriteFile(文件的路径和文件名,写入的数据)
Private Function WriteFile(ByVal pFile As String, ByVal inText As String) As Boolean
On Error Resume Next
Dim fN As Integer
fN = FreeFile
Open pFile For Output As #fN
Put #fN, , inText
Close #fN
WriteFile = (Err.Number = 0)
End Function
'调用方法:ReadFile(文件的路径和文件名)
Private Function ReadFile(pFile As String) As String
Dim fN As Integer
fN = FreeFile
Open pFile For Binary Access Read As #fN
ReadFile = Space(FileLen(pFile))
Get #fN, , ReadFile
Close #fN
End Function
dim N as Long
N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本
Dim TextLine as string
Open "c:\test1.txt" For Input As #1 ' 打开文件副本
Open "c:\test.txt" For Output As #2 ' 重写文件
dim i as long
Do While Not EOF(1) ' 循环至文件尾
i = i + 1
Line Input #1, TextLine ' 读入一行数据并将其赋予某变量
If Not N=i Then Print #2, TextLine'如果不是第N行,复制
Loop
Close #1 ' 关闭文件
Close #2 ' 关闭文件
kill "c:\test1.txt"'删除副本
都可以达到目的
myhgyp的代码使用FSO,适合初学者,但需引用对象,效率与通用性弱一些。
viena的代码简单适用,清晰明了,但IO操作多了些,文件大时影响效率。
dongge2000的代码,一次性载入与保存文件,内存中处理,IO交换次数最少,效率高得多,但处理时却使用了最慢的长字符串连接处理,效率又太低了,存在败笔。我想对内存中的处理,可这样:
Arr = Split(Str, vbCrLf)
Arr(DelIndex-1)=""
Str = Join(Arr, vbCrLf)不过,这会产生一个空行,若对空行不能接受的话,可这样!
Arr = Split(Str, vbCrLf)
'Arr(DelIndex-1)="换成一句文本不可能出现的内容"
Arr=Filter(Arr, Arr(DelIndex-1), False, vbTextCompare)
Str = Join(Arr, vbCrLf)Join、Split、Filter是专为解决VB长字符串运算极慢,而设计的函数,建议多多使用。