Редактирование файлов (вырезать, вставить, массово)

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

shveicar писал(а):Ну конечно, речь идет именно о замене фрагмента текста в теге, как я и пытался (видимо не совсем понятно) объяснить.
И даже сейчас ты не доходчиво объясняешь. То, что ты хочешь, я понял исключительно из описанной тобой процедуры проверки.
Ясно, что нужно заменить текст в файлах. Но что текст для замены нужно брать из соответствующей строки другого файла, это было неясно.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Извиняюсь, на будущее учту.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Batya писал(а):Но что текст для замены нужно брать из соответствующей строки другого файла, это было неясно.
А мне сразу было ясно:
Замена должна производиться из тексового файла в котором список ссылок для замены. ....
Естественно число html файлов и число ссылок в текстовом файле совпадают, то есть в каждом выделенном файле html производится замена одной ссылки на одну ссылку по порядку из текстового файла списка.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Flasher писал(а):А мне сразу было ясно
Ты счастливый человек - ничего не отвлекает от проблем TC посреди рабочего дня.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Последующий оффтоп отделён в тему Создание группы HTML-файлов с именами из файла-списка.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Честно пытался сделать набросок, но выходит не пойми чего:

Код: Выделить всё

' Замена в содержимом каждого из выделенных файлов строки на строку из файла списка
' в соответствии с сортировкой в активной панели и порядком следования в списке
' Параметры: %L "<Путь к файлу со списком замен>" 
'================================================
T=CreateObject("WScript.Shell").ExpandEnvironmentStrings(WScript.Arguments(1))
Str="<META HTTP-EQUIV=""Refresh"" CONTENT=""0; URL=prise.zip"">"

With CreateObject("Scripting.FileSystemObject")
Set Temp = .GetFile(WScript.Arguments(0)).OpenAsTextStream(1)
Set List = .GetFile(T).OpenAsTextStream(1)
On Error Resume Next
Do While Not Temp.AtEndOfStream And Not List.AtEndOfStream
  If Abs(Temp.Line)=Abs(List.Line) Then
   Set F = .OpenTextFile(Temp.ReadLine,1)
   Str1 = Left(List.ReadLine,Len(List.ReadLine))
   R = Replace(F.ReadAll, Str, "<META HTTP-EQUIV=""\Refresh"" CONTENT=""0; URL=" & Str1 & """>",1,1,1)
   .OpenTextFile(Temp.ReadLine,2).Write R
   F.Close
  End If
Loop
End With
WScript.Quit
Тут какое-то условие нужно особое. В общем, надо ждать Батю, пусть поправит, где я промахнулся. :)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

shveicar писал(а):Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Изменил свой скрипт.
Изменилась и кнопка.
Проверь.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо Batya - Ваш скрипт работает! (единственное путь к файлу filelist.txt
пришлось указывать полностью) в начальном варианте не работает, поясняю- работает с таким кодом кнопки

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\html\zamema_po_sablonu.vbs
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=prise.zip'>" "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=%%FromFileArr%%'>" 1 %L "f:\total\Utils\html\filelist.txt"
F:\WINDOWS\System32\WScript.exe
zamema_po_sablonu

0
-1


Ну это не существенно. главное результат! Еще раз огромное Cпасибо!
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

shveicar писал(а):единственное путь к файлу filelist.txt пришлось указывать полностью
Естесственно, я же чисто схематично привёл кнопку и не знаю путь к твоему filelist.txt.
Справедливости ради надо отметить, что может работать и без указания полного пути, если кнопка нажимается, когда текущей папкой является та, где лежит filelist.txt. А также будет работать, если заполнен "Путь запуска" кнопки, и filelist.txt лежит в этой папке.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

А также будет работать, если заполнен "Путь запуска" кнопки, и filelist.txt лежит в этой папке
А вот этот вариант я не учел. Для меня - он пожалуй самый удобный! :lol: Еще раз - премного благодарен!
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Добрый вечер. Batya - а возможно в Замечательном скрипте Добавить окно для ввода заменяемого текста, просто часто, в разных тегах попадается одинаковые значения для замены из файла списка, и приходится каждый раз менять параметры в кнопке( бывают длинные выражения), вобщем, сегодня пол-дня провел, чтобы заменить 5 одинаковых строчек в разных тегах. Конечно без скрипта, учитывая объем файлов, потребовалась наверное, неделя, Но Если такое возможно, Буду очень признателен, Спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Если не ошибаюсь, заменить

Код: Выделить всё

With WScript
  Str1 = .Arguments(0)
  Str2 = .Arguments(1)
  Mode = .Arguments(2)
  FF   = .Arguments(3)
  If .Arguments.Count > 4 Then FZ = .Arguments(4)
End With 
на

Код: Выделить всё

Str1 = InputBox("Введите искомую строку:", "Замена текста в файлах с помощью шаблонов")
With WScript
  Str2 = .Arguments(0)
  Mode = .Arguments(1)
  FF   = .Arguments(2)
  If .Arguments.Count > 3 Then FZ = .Arguments(3)
End With 
В параметрах не использовать первый исходный.
Последний раз редактировалось Flasher Чт июл 21, 2011 23:04, всего редактировалось 2 раза.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо, окно конечно появляется, но после ввода текста, - появляется еще одно окно для ввода текста замены, а речь идет о замене текста из строчек текстового файла, filelist.txt И потом как же быть с параметрами в кнопке("проблема" двойных кавычек), по идее в итоге. в кнопке должны остаться параметры

Код: Выделить всё

0 %L "filelist.txt"
или

Код: Выделить всё

1 %L "filelist.txt"
в зависимости от тега пример для первого случая значение в кнопке 0

Код: Выделить всё

"('flvpla1/player.swf','mplayer','640','380','9','000000')" "('%%FromFileArr%%','mplayer','640','380','9','000000')" 0 %L "filelist.txt"
и для второго случая значение1

Код: Выделить всё

"<a href='flvpla1/player.swf' rel='nofollow'>" "<a href='%%FromFileArr%%' rel='nofollow'>" 1 %L "filelist.txt"
только, во втором случае приходится в ручную менять двойные кавычки в теге, на одинарные, а - это крайне не удобно. поясню - в исходном варианте2, оригинал тега выглядит

Код: Выделить всё

<a href="flvpla1/player.swf" rel="nofollow">
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):Спасибо, окно конечно появляется, но после ввода текста, - появляется еще одно окно для ввода текста замены, а речь идет о замене текста из строчек текстового файла
Так и в скрипте и в кнопке фигурируют строки как для поиска, так и для замены. В чём проблема?
shveicar писал(а):только, во втором случае приходится в ручную менять двойные кавычки в теге, на одинарные, а - это крайне не удобно.
А как удобно? Чтобы автоматически определялось, ставить кавычки или нет? Или по умолчанию для искомой строки без кавычек, а для той, на которую производится замена, с?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Наверно я чего - то не понимаю, Попытаюсь разобраться подробнее(выделяем группу файлов html) первый выделенный файл в списке - 1.html Cтрока для поиска

Код: Выделить всё

('flvpla1/player.swf','mplayer','640','380','9','000000')
строка для замены

Код: Выделить всё

"('%%FromFileArr%%','mplayer','640','380','9','000000')"
параметр

Код: Выделить всё

%%FromFileArr%%
- подразумевает вставку строки №1 из файла - filelist.txt и так далее, число строк и число выделенных html файлов совпадает(строки в filelist.txt все разные). Вариант с кнопкой -работает, вариант с окном выдает ошибку.(кавычки я пока не рассматриваю). По идее вариант с окном должен выглядеть так - выделяем группу html файлов filelist.txt лежит в той-же папке. жмем кнопку - появляется окно со строкой поиска, вводим желаемый тег (в данном случае

Код: Выделить всё

flvpla1/player.swf
) нажимаем ок, и все совпадения во всех выделенных html файлах ( при условии одно совпадение в одном файле) меняются на значения из файла списка filelist.txt Если в каждом html файле например - два совпадения, тогда в параметрах кнопки стоит цифра2 (естественно что количество совпадений во всех html файлах одинаковое то есть 2), если три то 3. Ну вот, примерно такой вариант я имел ввиду.
Ответить