Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Замена слов из списка

Ответить
Настройки темы
VBS/WSH/JS - [решено] Замена слов из списка

Аватара для aggressor_

Пользователь


Сообщения: 101
Благодарности: 3


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте,
есть файл list.txt, который содержит в себе 3 строки, всегда разные, вот пример одного из файлов
Код: Выделить весь код
someaddress@mail.ru
тел. 43242342
ул.Красная 10 Караганда
Эту информацию нужно распределить по файлам в определённое место.
Грубо говоря найти слово "_something_" и заменить это слово на первую строку из файла list.txt, найти "_something2_" и заменить на вторую строку из файла и т.д.
Можно ли как-нибудь с помощью скрипта пробежаться по файлам в папке, включая подпапки, найти эти "анкоры" и заменить текст?

Отправлено: 22:02, 21-06-2012

 

Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:05, 22-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для aggressor_

Пользователь


Сообщения: 101
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата DmitriiV:
Можно, но нужно знать критерий, согласно которому выполняется замена. »
Допустим есть в папке 40 xml файлов. С помощью скрипта нужно просканировать эти файлы на наличие определённого слова и заменить его из списка.
_something1_ => someaddress(@)mail.ru (1 строчка из списка)
_something2_ => тел. 43242342 (2 строчка из списка)
_something3_ => ул.Красная 10 Караганда (3 строчка из списка)
Либо же напрямую обращаться к файлу, прописав путь.

Отправлено: 13:41, 22-06-2012 | #3


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


1. По-моему, задачи из Ваших сообщений не идентичны.
2. Что значит: "Либо же напрямую обращаться к файлу, прописав путь"?

Отправлено: 17:00, 22-06-2012 | #4


Аватара для aggressor_

Пользователь


Сообщения: 101
Благодарности: 3

Профиль | Отправить PM | Цитировать


Задачи идентичны. Просто немного переформулированы.
Цитата DmitriiV:
Что значит: "Либо же напрямую обращаться к файлу, прописав путь"? »
Это значит, что я знаю в каких именно файлах будут находиться эти анкоры, которые будет заменять скрипт. Т.е. можно либо просканировать папку и заменить слова в файлах, либо же прописать путь к каждому из необходимых файлов.

Отправлено: 17:33, 22-06-2012 | #5


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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

Последний раз редактировалось SendMessage, 24-06-2012 в 08:39. Причина: Добавлен финальный MsgBox

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:31, 24-06-2012 | #6


Аватара для aggressor_

Пользователь


Сообщения: 101
Благодарности: 3

Профиль | Отправить PM | Цитировать


Большое спасибо! То что надо!
Этот скрипт ограничен только 3 заменами, а можно добавить strRepl(3) = "_something4_" для четвёртой замены или этого мало и нужно будет ещё корректировать скрипт?

Последний раз редактировалось aggressor_, 25-06-2012 в 20:16.


Отправлено: 15:46, 25-06-2012 | #7


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Цитата 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). И, соответственно, добавляйте (или убирайте) заменяемые строчки
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:14, 26-06-2012 | #8


Аватара для aggressor_

Пользователь


Сообщения: 101
Благодарности: 3

Профиль | Отправить PM | Цитировать


Если я верно понял, то теперь можно просто менять значение nReplaceItems = ... и добавлять strRepl(...) = "..." столько, сколько мне нужно? Никаких ограничений на символы нет в заменяемом тексте?

Отправлено: 01:18, 26-06-2012 | #9


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:26, 26-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Замена слов из списка

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Словарь непонятных слов по ИТ Blast Хочу все знать 200 30-10-2016 21:46
.NET - Замена 2х-3х подряд идущих слов одним Marsella_88 Программирование и базы данных 11 01-06-2012 09:08
CMD/BAT - перестановка слов или число размещений из списка. Комбинаторика. MaximvsIT Скриптовые языки администрирования Windows 5 20-03-2012 18:37
Замена e7400 на q8400, нужна ли замена БП? Lehich22 Выбор отдельных компонентов компьютера и конфигурации в целом 3 24-12-2011 21:06
Программы - Отображение слов в WMP Олег97 Оформление Windows XP 1 04-08-2010 08:15




 
Переход