|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Как заменить части строки по списку? |
|
VBS/WSH/JS - Как заменить части строки по списку?
|
Пользователь Сообщения: 87 |
Профиль | Отправить PM | Цитировать Имеется код, осуществляющий двойную замену в файле (abc123 на xyz123 и abc789 на xyz789 ):
var fso = new ActiveXObject("Scripting.FileSystemObject"); var pattern1 = /abc123/g;var pattern1a = 'xyz123'; var pattern2 = /abc789/g;var pattern2a = 'xyz789'; var myInputTextStream = fso.OpenTextFile('C:\\test1.txt', 1, true); var myOutputTextStream = fso.OpenTextFile('C:\\test2.txt', 2, true); myOutputTextStream.Write( myInputTextStream .ReadAll() .replace(pattern1, pattern1a) .replace(pattern2, pattern2a) ) myInputTextStream.Close(); myOutputTextStream.Close(); Как сделать так чтобы можно было не перечислять паттерны замены в скрипте, а использовать список таких чисел C:\list.txt, разумеется элементов списка будет гораздо больше двух (abc и xyz при этом остаются фиксированными)? |
|
Отправлено: 13:19, 21-03-2018 |
Забанен Сообщения: 793
|
Цитата ruslaw:
То же применимо и к файлам. Кстати, примеры файлов где? |
|
Отправлено: 17:07, 21-03-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать что-то я не совсем понял как это работает
наверное штука сильная, но надо изучать В принципе спасибо |
Отправлено: 21:32, 21-03-2018 | #3 |
Забанен Сообщения: 793
|
Цитата ruslaw:
строка 1 abc123 abc789 строка 2 abc123 abc789 строка 3 abc123 abc789 строка 4 abc123 abc789 строка 5 abc123 abc789 строка 6 xyz123 abc789 строка 7 abc123 xyz789 строка 8 xyz123 xyz789 В итоге файл становится: |
|
Отправлено: 08:40, 22-03-2018 | #4 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать greg zakharov,
теперь у меня получилось вообще поиметь дело с этим sed, да, это сильная штука. Но у меня строение файла иное, file.txt: Цитата:
Цитата:
Цитата:
"физика" задачи такая: Есть страница куда регулярно добавляются книги с описаниями. Каждое такое описание заключено внутри тега <div id="div_file_123123">...</div> У меня есть прошлогодняя версия этой страницы из которой я извлек список номеров, включенных в id (типа 123123) и я хочу по всем этим номерам сделать у текущей страницы замену id="div_file_123123 на class=none id="div_file_123123 при этом добавить в css-стили страницы строку div.none { display: none } скрыв таким образом все что было в прошлом году и уже прочтено Все упирается в список. |
||||
Отправлено: 13:44, 22-03-2018 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать js по мотивам приведенных Вами примеров. Пропишите свои файлы и чему соответствуют abc и xyz
var inFile='Z:\\Box_In\\test1.txt'; var abc='abc'; var xyz='xyz'; var listFile='Z:\\Box_In\\list.txt' var outFile='Z:\\Box_In\\test2.txt'; var FSO=WScript.CreateObject("Scripting.FileSystemObject"); try {Txt=FSO.OpenTextFile(inFile, 1, false);} catch (err) { if (err != 0) { WScript.Echo("Open file "+inFile+"\nerror: "+err.number+"\n"+err.description); WScript.Quit(); } } var strContent = Txt.ReadAll(); Txt.Close(); try {Txt=FSO.OpenTextFile(listFile, 1, false);} catch (err) { if (err != 0) { WScript.Echo("Open file "+listFile+"\nerror: "+err.number+"\n"+err.description); WScript.Quit(); } } var strRepl; while (!Txt.eof) { try {strRepl = Txt.ReadLine()} catch (e) {if (e != 0) break} strRepl=strRepl.replace(new RegExp(' ', 'g'), ''); strContent=strContent.replace(new RegExp(abc+strRepl, 'g'), xyz+strRepl); } Txt.Close(); try {Txt=FSO.OpenTextFile(outFile, 2, true);} catch (err) { if (err != 0) { WScript.Echo("Open file "+outFile+"\nerror: "+err.number+"\n"+err.description); WScript.Quit(); } } Txt.Write(strContent); Txt.Close(); |
------- Последний раз редактировалось megaloman, 22-03-2018 в 15:44. Отправлено: 15:36, 22-03-2018 | #6 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать megaloman,
БОЛЬШОЕ СПАСИБО, все работает! Идея с макросом конечно интересная - если только знать VBA .... (но увыыыыы ) |
Отправлено: 16:27, 22-03-2018 | #7 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
------- Отправлено: 20:54, 22-03-2018 | #8 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Супер! Все сработало. Спасибо!
|
Отправлено: 12:13, 23-03-2018 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск строки и использование её части | Ewgenyk | Скриптовые языки администрирования Windows | 0 | 06-12-2017 14:36 | |
VBS/WSH/JS - [решено] Поиск строки по части названия и вывод данных в ECHO | Kainos | Скриптовые языки администрирования Windows | 14 | 16-04-2015 22:21 | |
CMD/BAT - [решено] удаление части строки | nvitek | Скриптовые языки администрирования Windows | 18 | 27-08-2014 17:32 | |
VBS/WSH/JS - [решено] Парсинг части строки с разделителями | Kosmoman | Скриптовые языки администрирования Windows | 4 | 22-05-2014 13:31 | |
CMD/BAT - Заменить строки в бат файле | Gala.qwer | Скриптовые языки администрирования Windows | 1 | 11-08-2011 19:16 |
|