2014-10-23 2 views
1

Я хочу вставить строку в определенную позицию в текстовом файле формата «utf-8».Как вставить текст в текстовый файл с помощью VBA

пусть говорят, что содержание в файле «12367890»

теперь я хочу, чтобы вставить «45» после того, как «3», то есть в положении 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"

+0

Посмотрите [ 'FileSystemObject'] (http://stackoverflow.com/a/5798392/380384) и как он может быть использован для обработки текстовых файлов. – ja72

+0

Также текстовый файл должен _never_ иметь расширение '.bin' – ja72

ответ

0

Как вы, возможно, догадались, «WriteText» перезаписывает текст в этом положении, а не вставляет. Вместо этого напишите все до новой точки ввода символов (после «3»), напишите «4» и «5», а затем выведите остальные.

Возможно, вам будет проще читать файл в строке, а затем манипулировать строкой со встроенными строковыми функциями, а затем выводить в файл, а не манипулировать текстовыми файлами.

+0

[Скрытые функции VBA с акцентом на функцию« Mid $() »(http://stackoverflow.com/questions/1070863/hidden-features- of-vba) –

0

Вы можете создать временный файл с измененным текстом и заменить этот существующий файл. Вот доказательство концепции.

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 Scripting Runtime (за Example here.)
  • fso.GetSpecialFolder(2) возвращает путь к временной папке.
  • fso.GetTempName() возвращает имя файла как radA5FC8.tmp
+0

Как вы это делаете, когда есть сотни строк? Я не могу использовать литературу для каждого :( –

+0

Команды 'WriteLine()' были использованы только для создания файла примера. Очень маловероятно, что исходный файл будет жестко закодирован с помощью операторов 'WriteLine()' . Скорее всего, он генерируется из другого места, и операция замены должна действовать только в одной строке. – ja72

Смежные вопросы