aggressor_ |
21-06-2012 22:02 1938455 |
Замена слов из списка
Здравствуйте,
есть файл list.txt, который содержит в себе 3 строки, всегда разные, вот пример одного из файлов
Код:
someaddress@mail.ru
тел. 43242342
ул.Красная 10 Караганда
Эту информацию нужно распределить по файлам в определённое место.
Грубо говоря найти слово "_something_" и заменить это слово на первую строку из файла list.txt, найти "_something2_" и заменить на вторую строку из файла и т.д.
Можно ли как-нибудь с помощью скрипта пробежаться по файлам в папке, включая подпапки, найти эти "анкоры" и заменить текст?
|
Можно, но нужно знать критерий, согласно которому выполняется замена.
|
aggressor_ |
22-06-2012 13:41 1938737 |
Цитата:
Цитата DmitriiV
Можно, но нужно знать критерий, согласно которому выполняется замена. »
|
Допустим есть в папке 40 xml файлов. С помощью скрипта нужно просканировать эти файлы на наличие определённого слова и заменить его из списка.
_something1_ => someaddress(@)mail.ru (1 строчка из списка)
_something2_ => тел. 43242342 (2 строчка из списка)
_something3_ => ул.Красная 10 Караганда (3 строчка из списка)
Либо же напрямую обращаться к файлу, прописав путь.
|
1. По-моему, задачи из Ваших сообщений не идентичны.
2. Что значит: "Либо же напрямую обращаться к файлу, прописав путь"?
|
aggressor_ |
22-06-2012 17:33 1938915 |
Задачи идентичны. Просто немного переформулированы.
Цитата:
Цитата DmitriiV
Что значит: "Либо же напрямую обращаться к файлу, прописав путь"? »
|
Это значит, что я знаю в каких именно файлах будут находиться эти анкоры, которые будет заменять скрипт. Т.е. можно либо просканировать папку и заменить слова в файлах, либо же прописать путь к каждому из необходимых файлов.
|
SendMessage |
24-06-2012 08:31 1939612 |
Код:
Option Explicit
Dim objFSO
Dim objShApp
Dim objWshSh
Dim strMask
Dim CurrFolderPath
Dim strFileP
Dim OpenFile
Dim nLine
Dim strLine(2)
Dim strRepl(2)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objShApp = WScript.CreateObject("Shell.Application")
Set objWshSh = CreateObject("WScript.Shell")
' поместите файл скрипта в каталог, который нужно обработать
CurrFolderPath = objWshSh.CurrentDirectory
' маска обрабатываемых файлов
strMask = "*.txt; *.htm"
' файл-образец для замены
strFileP = "z:\list.txt"
' заменяемые выражения
strRepl(0) = "_something1_"
strRepl(1) = "_something2_"
strRepl(2) = "_something3_"
Set OpenFile = objFSO.OpenTextFile(strFileP, 1)
Do Until OpenFile.AtEndOfStream = True Or nLine = 2
nLine = OpenFile.Line - 1
strLine(nLine) = OpenFile.ReadLine
Loop
OpenFile.Close
If nLine < 2 Then
MsgBox "Некорректный файл-образец"
Else
GetFiles objFSO.GetFolder(CurrFolderPath)
End If
Set objFSO = Nothing
Set objShApp = Nothing
Set objWshSh = Nothing
MsgBox "Скрипт завершил обработку каталога"
WScript.Quit
Sub GetFiles(objFolder)
Dim SubFolderItem
ReplaceTextToFiles(objFolder.Path)
For Each SubFolderItem In objFolder.SubFolders
GetFiles SubFolderItem
Next
End Sub
Sub ReplaceTextToFiles(strPath)
Dim arrFiles
Dim i, n
Dim strItemFile
Dim strText
Set arrFiles = objShApp.NameSpace(strPath).Items
arrFiles.Filter 192, strMask
For i = 0 To arrFiles.Count - 1
strItemFile = arrFiles.Item(i).Path
Set OpenFile = objFSO.OpenTextFile(strItemFile, 1)
strText = OpenFile.ReadAll
OpenFile.Close
For n = 0 To 2
strText = Replace(strText, strRepl(n), strLine(n), 1, -1, 1)
Next
Set OpenFile = objFSO.OpenTextFile(strItemFile, 2)
OpenFile.Write strText
OpenFile.Close
Next
End Sub
|
aggressor_ |
25-06-2012 15:46 1940238 |
Большое спасибо! То что надо!
Этот скрипт ограничен только 3 заменами, а можно добавить strRepl(3) = "_something4_" для четвёртой замены или этого мало и нужно будет ещё корректировать скрипт?
|
SendMessage |
26-06-2012 01:14 1940490 |
Цитата:
Цитата aggressor_
Этот скрипт ограничен только 3 заменами, а можно добавить strRepl(3) = "_something4_" для четвёртой замены или этого мало и нужно будет ещё корректировать скрипт? »
|
Да, нужно.
читать дальше »
Код:
Option Explicit
Dim objFSO
Dim objShApp
Dim objWshSh
Dim strMask
Dim CurrFolderPath
Dim strFileP
Dim OpenFile
Dim nLine
Dim strLine()
Dim strRepl()
Dim nReplaceItems
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objShApp = WScript.CreateObject("Shell.Application")
Set objWshSh = CreateObject("WScript.Shell")
' количество заменяемых пунктов (минус 1 пункт)
nReplaceItems = 3
ReDim strLine(nReplaceItems)
ReDim strRepl(nReplaceItems)
' поместите файл скрипта в каталог, который нужно обработать
CurrFolderPath = objWshSh.CurrentDirectory
' маска обрабатываемых файлов
strMask = "*.txt; *.htm"
' файл-образец для замены
strFileP = "z:\list.txt"
' заменяемые выражения
strRepl(0) = "_something1_"
strRepl(1) = "_something2_"
strRepl(2) = "_something3_"
strRepl(3) = "_something4_"
Set OpenFile = objFSO.OpenTextFile(strFileP, 1)
Do Until OpenFile.AtEndOfStream = True Or nLine = nReplaceItems
nLine = OpenFile.Line - 1
strLine(nLine) = OpenFile.ReadLine
Loop
OpenFile.Close
If nLine < nReplaceItems Then
MsgBox "Некорректный файл-образец"
Else
GetFiles objFSO.GetFolder(CurrFolderPath)
End If
Set objFSO = Nothing
Set objShApp = Nothing
Set objWshSh = Nothing
MsgBox "Скрипт завершил обработку каталога"
WScript.Quit
Sub GetFiles(objFolder)
Dim SubFolderItem
ReplaceTextToFiles(objFolder.Path)
For Each SubFolderItem In objFolder.SubFolders
GetFiles SubFolderItem
Next
End Sub
Sub ReplaceTextToFiles(strPath)
Dim arrFiles
Dim i, n
Dim strItemFile
Dim strText
Set arrFiles = objShApp.NameSpace(strPath).Items
arrFiles.Filter 192, strMask
For i = 0 To arrFiles.Count - 1
strItemFile = arrFiles.Item(i).Path
MsgBox strItemFile
Set OpenFile = objFSO.OpenTextFile(strItemFile, 1)
strText = OpenFile.ReadAll
OpenFile.Close
For n = 0 To nReplaceItems
strText = Replace(strText, strRepl(n), strLine(n), 1, -1, 1)
Next
Set OpenFile = objFSO.OpenTextFile(strItemFile, 2)
OpenFile.Write strText
OpenFile.Close
Next
End Sub
В выделенное красным вставляйте нужное количество строк для замены (минус 1). И, соответственно, добавляйте (или убирайте) заменяемые строчки
|
aggressor_ |
26-06-2012 01:18 1940491 |
Если я верно понял, то теперь можно просто менять значение nReplaceItems = ... и добавлять strRepl(...) = "..." столько, сколько мне нужно? Никаких ограничений на символы нет в заменяемом тексте?
|
SendMessage |
26-06-2012 01:26 1940492 |
Насчет ограничений на символы не очень понял.
В остальном - да. Но не стоит выходить за рамки количества нужных строк в файле-образце.
|
aggressor_ |
26-06-2012 01:35 1940494 |
Цитата:
Цитата SendMessage
Насчет ограничений на символы не очень понял. »
|
!"№#@:"^&$% и т.д. они все будут перемещаться из файла образца и скрипт не будет обрезать или игнорировать их?
|
SendMessage |
26-06-2012 01:41 1940496 |
Должны все. Но можно ведь и проверить. Это не сложно.
|
2SendMessage, оффтопиком:
читать дальше »
Так:
Код:
Dim arrRepl
arrRepl = Array("_something1_", "_something2_", "_something3_", "_something4_")
…
For Each elem In arrRepl
'или
'For i = LBound(arrRepl) To Ubound(arrRepl)
…
удобнее.
|
Время: 11:57.
© OSzone.net 2001-2025