Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBScript将文本从一个文件附加到特定行后的另一个文件?_Vbscript - Fatal编程技术网

如何使用VBScript将文本从一个文件附加到特定行后的另一个文件?

如何使用VBScript将文本从一个文件附加到特定行后的另一个文件?,vbscript,Vbscript,我需要将一个文本文件的内容插入到另一个现有的文本文件中,该文本文件位于包含特定单词的行之后 这是我的密码 '//OPEN FILE and READ Set objFileToRead = fso.OpenTextFile(ActiveDocument.Path & "\file.txt", 1) strFileText = objFileToRead.ReadAll() objFileToRead.Close objStartFolder = ActiveDocument.Path

我需要将一个文本文件的内容插入到另一个现有的文本文件中,该文本文件位于包含特定单词的行之后

这是我的密码

'//OPEN FILE and READ
Set objFileToRead = fso.OpenTextFile(ActiveDocument.Path & "\file.txt", 1)
strFileText = objFileToRead.ReadAll()
objFileToRead.Close

objStartFolder = ActiveDocument.Path
Set objFolder = fso.GetFolder(objStartFolder)
Set colFiles = objFolder.files

For Each objFile In colFiles
  If fso.GetExtensionName(objFile.Name) = "opf" Then
    filename = objFile.Name
  End If
Next
MsgBox filename

'///PASTE
If fso.FileExists(ActiveDocument.Path & "\" & filename) Then
  MsgBox filename
  Set objFile = fso.OpenTextFile(ActiveDocument.Path & "\" & filename)

  Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine

    If InStr(strLine, "<manifest>") = 1 Then
      MsgBox filename
      objFile.WriteLine vbCrLf & strFileText
      objFile.Close
    End If
  Loop
End If

谁能告诉我出了什么问题以及我必须做什么吗?

你不能写入打开阅读的文件

将修改后的内容写入临时文件,然后将原始文件替换为临时文件:

p = fso.BuildPathActiveDocument.Path, filename)

Set f1 = fso.OpenTextFile(p)
Set f2 = fso.OpenTextFile(p & ".tmp", 2, True)

Do Until f1.AtEndOfStream
  line = f1.ReadLine
  f2.WriteLine line
  If InStr(line, "<manifest>") = 1 Then f2.WriteLine strFileText
Loop

f1.Close
f2.Close

fso.DeleteFile p, True
fso.GetFile(p & ".tmp").Name = filename
p=fso.BuildPathActiveDocument.Path,文件名)
Set f1=fso.OpenTextFile(p)
Set f2=fso.OpenTextFile(p&“.tmp”,2,True)
直到f1.AtEndOfStream
line=f1.ReadLine
f2.WriteLine行
如果InStr(行“”)=1,则f2.WriteLine strFileText
环
f1.关闭
f2.关闭
fso.delete文件p,True
fso.GetFile(p&“.tmp”).Name=文件名
或者在将修改后的内容写回原始文件之前,将整个内容读入内存:

p = fso.BuildPathActiveDocument.Path, filename)

txt = Split(fso.OpenTextFile(p).ReadAll, vbNewLine)

Set f = fso.OpenTextFile(p, 2)
For Each line In original
  f.WriteLine line
  If InStr(line, "<manifest>") = 1 Then f.WriteLine strFileText
Next
f.Close
p=fso.BuildPathActiveDocument.Path,文件名)
txt=Split(fso.OpenTextFile(p.ReadAll,vbNewLine)
Set f=fso.OpenTextFile(p,2)
原文中的每一行
f、 写线
如果InStr(行“”)=1,则f.WriteLine strFileText
下一个
f、 接近

请注意,后者不应用于大文件,以免您的计算机因内存耗尽而死机。

谢谢@Ansgar Wiechers。但我有一个疑问,代码是用于修改单个文件还是将内容从一个文件复制并附加到不同的文件两个代码片段都会修改源文件,因为这就是你问题中的代码试图做的。如果要写入其他文件:请使用第一个代码段,为输出文件选择适当的名称,然后删除替换原始文件的部分。
p = fso.BuildPathActiveDocument.Path, filename)

txt = Split(fso.OpenTextFile(p).ReadAll, vbNewLine)

Set f = fso.OpenTextFile(p, 2)
For Each line In original
  f.WriteLine line
  If InStr(line, "<manifest>") = 1 Then f.WriteLine strFileText
Next
f.Close