如何使用VBA将文本插入文本文件

如何使用VBA将文本插入文本文件,vba,Vba,我想在“utf-8”格式的文本文件中的特定位置插入一个字符串 假设文件中的内容是“12367890” 现在我想在“3”之后插入“45”,即在位置3处 现在,文件中的内容变为“1234567890” 我写了一些文章,但不起作用 dim str as string Dim binaryObj As Object str = "12367890" Set binaryObj = CreateObject("adodb.stream") binaryObj.Open binaryObj.Chars

我想在“utf-8”格式的文本文件中的特定位置插入一个字符串

假设文件中的内容是“12367890”

现在我想在“3”之后插入“45”,即在位置3处

现在,文件中的内容变为“1234567890”

我写了一些文章,但不起作用

dim str as string 
Dim binaryObj As Object

str = "12367890"

Set binaryObj = CreateObject("adodb.stream")
binaryObj.Open
binaryObj.Charset = "UTF-8"
binaryObj.Type = 2
h = 0
For h = 0 To length
    jpByte = Mid(jpString, h + 1, 1)
    binaryObj.WriteText jpByte
Next
binaryObj.WriteText ChrW(0)
binaryObj.Position = 6
binaryObj.WriteText "4"
binaryObj.Position = 7
binaryObj.WriteText "5"

binaryObj.SaveToFile "D:\A4\Message_tool\withBom.bin", adSaveCreateOverWrite
不是插入4和5,而是将它们替换为6和7。 output=“12345890”

您可能已经猜到,“WriteText”会覆盖该位置的文本,而不是插入。相反,写下所有内容直到新字符插入点(在“3”之后),写下“4”和“5”,然后输出其余内容


您可能会发现将文件读入字符串,然后使用内置字符串函数操作字符串,然后输出到文件,而不是操作文本文件更容易。

您可以使用修改后的文本创建临时文件并替换现有文件。这是一个概念证明

Public Sub TextFileModify()

    Dim fso As New FileSystemObject
    Dim text As String, line As String, temp As String
    Dim path As String, fs As TextStream, fs2 As TextStream

    'First create a text file with original content
    path = fso.BuildPath(fso.GetSpecialFolder(2), "textfile.txt")
    Set fs = fso.CreateTextFile(path, True)
    fs.WriteLine "12367890"
    fs.WriteLine "other stuff"
    fs.Close

    'Now open the file to replace a line of text
    temp = fso.BuildPath(fso.GetSpecialFolder(2), fso.GetTempName())
    Set fs = fso.OpenTextFile(path, ForReading)
    Set fs2 = fso.CreateTextFile(temp)
    While Not fs.AtEndOfStream
        If fs.line = 1 Then
            line = fs.ReadLine
            fs2.WriteLine Left(line, 3) & "45" & Mid(line, 4)
        Else
            fs2.WriteLine fs.ReadLine
        End If
    Wend
    fs.Close
    fs2.Close

    'New delete old file and replace with new file
    fso.DeleteFile path
    fso.MoveFile temp, path

    ' textfile.txt now contains "1234567890" in the first line and the rest of the file is identical

End Sub
注:

  • 您必须添加对Microsoft脚本运行时的引用(per.)
  • fso.GetSpecialFolder(2)
    返回临时文件夹的路径
  • fso.GetTempName()
    返回类似于
    radA5FC8.tmp的文件名

查找以及如何使用它来处理文本文件。此外,文本文件不应具有扩展名
.bin
当有数百行时,如何执行此操作?我不能对每个文件都使用writeline:(
writeline()
命令仅用于创建示例文件。原始文件不太可能使用
writeline()进行硬编码)
语句。它很可能是从其他地方生成的,替换操作只需对一行执行。