Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Windows 2000/XP/Vista пользователю


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 653
∙ повысить рейтинг »
Megaloman
Статус: Академик
Рейтинг: 393
∙ повысить рейтинг »
Admitrienko
Статус: 5-й класс
Рейтинг: 288
∙ повысить рейтинг »

∙ Windows

Номер выпуска:1842
Дата выхода:03.05.2017, 11:15
Администратор рассылки:Андреенков Владимир (Профессор)
Подписчиков / экспертов:69 / 61
Вопросов / ответов:1 / 1

Консультация # 190927: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Добрый день! Есть txt файл, который содержит след. информацию. Подскажите пожалуйста, как удалить кусок текста и заменить на другую информацию. Т.е мне нужно удалить содержимое, которое находится в $Log: и заканчивается $ и добавить новую информацию. Пример: Исходный файл: /*...

Консультация # 190927:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Добрый день! Есть txt файл, который содержит след. информацию.
Подскажите пожалуйста, как удалить кусок текста и заменить на другую информацию.
Т.е мне нужно удалить содержимое, которое находится в $Log: и заканчивается $ и добавить новую информацию.
Пример:
Исходный файл:
/*
--------- Begin Version Control Data----------------------------------------
-- $URL:$
-- $Rev:$
-- $Date:$
-- $Author:$
-- $Log
sdfsdf
sdfsdfsd
fsdfsdf
sdf
-- $
--------- End Version Control Data -----------------------------------------
*/
Далее заменяем кусок текста(который находится в $Log: и заканчивается $) на любой текст и должны получить вот такой вариант
/*
--------- Begin Version Control Data----------------------------------------
-- $URL:$
-- $Rev:$
-- $Date:$
-- $Author:$
-- $Log
3423sdfsап
3453sdfsdвпвап
-- $
--------- End Version Contr ol Data -----------------------------------------
*/

Дата отправки: 27.04.2017, 20:21
Вопрос задал: Дмитрий Соколов (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Алексеев Владимир Николаевич (Советник):

Здравствуйте, Дмитрий !
В минифоруме Вашего Вопроса Вы уточнили, что Вам надо не просто "удалить кусок текста и заменить на др…", а "написать bat-скрипт", автоматизирующий операцию замены текстового блока. Bat-скрипты давно устарели изза своих ограниченных возможностей и систематических "глюков" с кириллицей и управляющими спец-символами. Писать на них - долгая и неблагодарная работа.

Я предпочитаю использовать VBScript, потому что большинство других языков программирования требуют установку специального ПрогОбеспечения (среда программирования, компилятор, редактор…). И если придётся подправить свою программу на чужом компьютере, учитывая пожелания конкретного клиента (например, чтоб значительно облегчить и ускорить настройку свеже-установленной ОперСистемы), то мало кому понравится, чтоб я на его машине устанавливал ненужные ему приложения. А для работы VBS нужны всего лишь WScript-обработчик и Блокнот, имеющиеся в любой ОС. Эти 2 файла даже искать не надо. Система сама загружает их по команде Запустить/Изменить (скрипт).

Итак, мы имеем Ваш ИсходныйФайл.txt и Заменитель.vbs . Как связать их и разработать алгоритм? К сожалению, Вы не ответили на уточняющие вопросы, и поэтому я по примеру уважаемого эксперта Megaloman принимаю простейшее предположение, будто Ваш документ расположен в популярном пути C:\Temp\ . Если это не так, Вы можете легко исправить путь во 2й строке скрипта. Для правки файла Заменитель.vbs надо из его контекстного меню (клик правой кнопкой мыши по значку файла в Проводнике) выбрать команду "Изменить". После правки надо Сохранить изменения экранной копии обратно в файл.

Если путь или имя документа не соответствуют прописке в скрипте, то исполняемый скрипт при попытке зачитать несоответствующий докум останавливается с выдачей ошиб-кода, мало-понятного начинающим пользователям. Для исключения "вылетов" полезно добавлять "Защиту от дурака", проверяющую существование прописанного документа и выдающую всем понятное сообщение при нестыковке.

Наличие документа проверили. Читаем файл. Тут тоже могут быть нюансы (кодировка юникод…), но Вы не прислали свой исходник, поэтому делаем, как наиболее вероятно и проще.

Чтоб "удалить содержимое, которое находится в $Log:" разрезаем докум-копию фрагментом, прописанным в переменной
s1=vbCrLf & "-- $Log" & vbCrLf
в 3й строке скрипта. Для страховки от случайных ошибок разреза я добавил к Вашему слову $Log: начало строки и окружающие символы переноса строки. Теперь если в Вашем большом исходнике будут ещё другие слова "$Log:" без символов "-- " слева и не окружённые переносами, то ошибочная замена в других блоках не произойдёт.

Аналогично разрезаем нижний отрезок фрагментом
s2=vbCrLf & "-- $" & vbCrLf
Получили 3 отрезка. Средний из них заменяем на
sn="Замененная строка1" & vbCrLf & "Замененная строка2"
Осталось "склеить" все 3 отрезка с добавлением разрезающих фрагментов.

Почти во всех строках скрипта я добавил для Вас поясняющие комментарии. Апостроф и всё, что правее него до конца строки, игнорируется обработчиком скрипта. Используем апостроф с клавиши Кавычка (русская Э), а не с клавиши Тильда (рус Ё)!

Распакуйте приложенный ИсходныйФайл.txt в папку C:\Temp . Заменитель.vbs можно распаковать куда хотите или запускать прямо из окна Вашей программы-архиватора. Сейчас Заменитель работает в демо-режиме: он не затирает исходник, а создаёт Правленный файл.txt в папке C:\Temp и открывает его в Блокноте на показ. Когда Вы убедитесь в прав ильной замене строк, откройте Заменитель.vbs из его контекста \ Изменить. Закомментируйте 9ю строку
f2="C:\Temp\Правленный файл.txt"
вставкой апострофа слева (перед f2), сохраните изменения, и после этого скрипт будет заменять ИсходныйФайл.txt вместо создания Правленного. Корректор проверен под WinXP и Win7.

Если у Вас много документов для замены, то удобно привязывать не докум к скрипту, а скрипт к папке SendTo . Под WindowsXP эта сис-папка расположена в пути C:\Documents and Settings\Вася\SendTo , а под Win7 и более поздних - в C:\Users\Вася\AppData\Roaming\Microsoft\Windows\SendTo (вместо Вася долж быть псевдоним учётки Пользователя, а вместо C: - возможна другая диск-буква с текущей ОС и папкой \Windows\ ).

Когда в папке SendTo Вы создадите ярлык, ссылающий на Заменитель.vbs , то любой файл в любом пути можно из его контекстного меню Отправить к Заменитель, и скрипт обработает отправленный к нему докум. Бывает очень удобно, когда нап ример десятки сохранённых html-страниц я отправляю к HtmЧистка.vbs , где докумы очищаются от рекламного мусора, уменьшаются в размере в 10…20 раз и при открытии больше не лезут в интернет за докачкой реклам.

Конечно, возможны неожиданности, если Ваш исходник защищён от изменения атрибутами ТолькоДляЧтения или требует прав Админа для перезаписи. Тогда придётся добавить в скрипт соответствующие команды. Удачи.
Скачать >>

Консультировал: Алексеев Владимир Николаевич (Советник)
Дата отправки: 01.05.2017, 16:54
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное