2011-12-29 2 views
2

У меня есть файл с несколькими строками.Вставить «-» в определенном месте с помощью VBScript

  • Требуется наличие «-» после 8-й позиции в каждой строке.
  • Я могу читать строки с «-» на 9-й позиции, но я не могу написать «-» на 9-й позиции, если ее там нет.

Любая помощь была бы действительно оценена.

+1

Почтовый индекс пожалуйста –

ответ

3

Это будет

  • открыть файл C:\temp\log.txt,
  • сделать глобальные изменения с одним regexo
  • написать новый текст в тексте обратно над исходным файлом

Пожалуйста, измените путь к файлу в соответствии с этой линии
StrFileName = "C:\temp\log.txt"

Const ForReading = 1  
Const ForWriting = 2 
Dim objFSO 
Dim objTF 
Dim objRexex 
Dim StrFileName 
Dim strTxt 

StrFileName = "C:\temp\log.txt" 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTF = objFSO.OpenTextFile(StrFileName, ForReading) 
Set objregex = CreateObject("vbscript.regexp") 
strTxt = objTF.ReadAll 
objTF.Close 
With objregex 
    .Global = True 
    .MultiLine = True 
    .Pattern = "^(.{8})[^-](.*)$" 
    strTxt = .Replace(strTxt, "$1" & "-" & "$2") 
End With 

Set objTF = objFSO.OpenTextFile(StrFileName, ForWriting) 
objTF.Write strTxt 
objTF.Close 
4

Вы не можете вставлять символы в строку VBScript, потому что они неизменяемы; вам придется объединить новую строку с Left(sOrgStr, 8) & "-" & Mid(sOrgStr, 9). (Числа + -1 в зависимости от того, как считать.)

2

вы можете исправить строки вы читаете, используя этот код:

s="input string" 
if (mid(s,9,1)<>"-") then 'the 9th character isn't "-" 
    s=left(s,8) & "-" & mid(s,9) 
end if 

я предлагаю вам открыть файл для ввода и переписываете это в другой текстовый файл.

+1

Примечание: Это также будет поставить тире (-) в конце каждой строки, которая короче 8 символов. – AutomatedChaos

1

Вы можете использовать регулярные выражения.

Если вы читаете строки 1 на 1, я думаю, что нужно что-то вроде

Set objRe = New RegExp 
' this will match any line having 9 or more characters, 
' where the 9-th character is not "-", and capture the first 8 characters in the group #1 
objRe.Pattern = "^(.{8})[^-]" 

' Open the file, read lines, in the inner loop, call: 
line = objRe.Replace(line, "$1-") ' This will replace the RE with the group #1 followed by '-' 
+0

Глобальная замена регулярных выражений была бы более эффективной, чем строка за строкой – brettdj

+0

@brettdj: да, однако нет никакой гарантии, что все данные подходят два раза в адресном пространстве (например, на 32-разрядных платформах): в VBS строки являются BSTR, т.е. USC2, т.е. 2 байта на символ. Поэтапная обработка позволяет обрабатывать огромные файлы. – Soonts

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