我有一个do-while循环,它应该做三件事:逐行遍历文本文件,文本文件包含路径名和文件名(C:\Folder\file1.txt)。
如果该行包含某个字符串,则会将文件复制到该位置,将其重命名为文本文件中的名称,然后替换复制的文件中的字符串。
如果不是,则转到下一行。
我认为这将是相当直接的,但它似乎不起作用。我现在甚至无法编译,因为我收到错误,说循环的语法是错误的。
任何帮助都将不胜感激,下面是整个函数的代码:
Private Sub Command2_Click()
Dim LineData As String
Dim FileHandle As Integer
FileHandle = FreeFile
Open "C:\textfile.txt" For Input As #FileHandle
Do While Not EOF(FileHandle)
Line Input #FileHandle, LineData
If InStr(LineData, ".log") Then
FileCopy "C:\thefile.log",LineData
Open LineData For Input As #3
#3 = Replace$(#3, "abc", "xyz")
Else
End If
Loop
Close #FileHandle
Close #3
MsgBox "Copy, Replace, Complete!"
End Sub提前感谢!
发布于 2008-11-15 22:07:36
我不相信
#3 = Replace$(#3, "abc", "xyz")是有效的。您需要逐行读取该文件的内容(或一次读取一些合理的块),进行替换,然后将其写回一个新文件。由于您无论如何都要复制该文件,因此我建议从源位置读取该文件,并将新版本写入该文件本来会被复制到的位置。
例如..。
Private Sub Command2_Click()
Dim LineData As String
Dim FileHandle As Integer
Dim sourceHandle as Integer
Dim destHandle as Integer
dim temp as string
FileHandle = FreeFile
Open "C:\textfile.txt" For Input As #FileHandle
Do While Not EOF(FileHandle)
Line Input #FileHandle, LineData
If InStr(LineData, ".log") Then
sourceHandle=FreeFile
Open "C:\thefile.log" For Input as #sourceHandle
destHandle=FreeFile
Open LineData For Output as #destHandle
Do while Not EOF(sourceHandle)
Line Input #sourceHandle,temp
temp=replace$(temp,"abc","xyz")
Print #destHandle,temp
Loop
Close #destHandle
Close #sourceHandle
End If
Loop
Close #FileHandle
MsgBox "Copy, Replace, Complete!"
End Sub抱歉,如果有任何错误,这没有测试,因为我没有在这台计算机上安装VB集成开发环境。
发布于 2008-11-16 12:04:31
#3 =替换$...你的问题是..。解决这个问题和其他问题会导致如下结果:
Private Sub Command2_Click()
Dim LineData As String
Dim FileHandle As Integer
Dim Buffer As String
FileHandle = FreeFile
Open "C:\thefile.log" For Binary Access Read As #FileHandle
Buffer = Space(LOF(FileHandle))
Get #FileHandle, , Buffer
Buffer = Replace(Buffer, "abc", "xyz")
Close #FileHandle
FileHandle = FreeFile
Open "C:\textfile.txt" For Input As #FileHandle
Do Until EOF(FileHandle)
Line Input #FileHandle, LineData
If InStr(LineData, ".log") Then
Open LineData For Output As #3
Print #3, Buffer;
Close #3
End If
Loop
Close #FileHandle
MsgBox "Copy, Replace, Complete!"
End Sub如果你更喜欢极简主义和短代码,你可以这样做:
Private Sub Command2_Click()
''// This code requires a reference to Microsoft Scripting runtime (Project -> References)
Dim FSO As New Scripting.FileSystemObject
Dim Files() As String
Dim File As String
Dim Data As String
Data = Replace(FSO.OpenTextFile("C:\thefile.log").ReadAll(), "abc", "xyz")
Files = Split(FSO.OpenTextFile("C:\textfile.txt").ReadAll(), vbCrLf)
For Each File In Files
If InStr(File, ".log") > 0 Then FSO.CreateTextFile(File, True).Write Data
Next
MsgBox "Copy, Replace, Complete!"
End Sub发布于 2008-11-15 22:00:37
我看到的一个问题是,您先打开filehandle,然后是#3,但您以相同的顺序关闭它们,并且您应该先关闭#3,然后再关闭filehandle。
我看到的是,文件句柄打开了,然后它搜索包含".log“的行,然后它做了一些事情-到目前为止,一切都很好。然而,它然后打开#3,做一些其他的事情,然后循环。它需要在完成后关闭#3。
将"Close #3“上移4行(移到"#3 = Replace...”之后的下一条语句应该做你期望的事情,并且应该编译的很好。
https://stackoverflow.com/questions/293100
复制相似问题