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

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

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

Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Flasher
Бинарность файла не указывает на то, в каком формате нужно обрабатывать файл.
Ну это разве что для вас бинарность не показатель и вы редактируете такие файлы в Блокноте, а для всех остальных - это означает шестнадцатеричное редактирование со всеми вытекающими.

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

Сообщение Flasher »

Jonmey писал(а):и вы редактируете такие файлы в Блокноте
Это что ещё за глупость? Ах, да, сейчас уже начинаю припоминать причину подобных "выводов"...
Jonmey писал(а):а для всех остальных - это означает шестнадцатеричное редактирование со всеми вытекающими
Только за остальных говорить не надо, а уж тем более за всех, подавляющая масса которых даже представления об этом не имеет.
Jonmey писал(а):Если у вас нет конкретного решения соответствующего заданным выше условиям, то вы меня очень обяжете, если воздержитесь далее от пустых разговоров на эту тему.
Пустые разговоры - это утверждение того, что не соответствует действительности, что можно наблюдать в предыдущих ваших постах. Я предложил средство автоматизации, которое основную часть указанных потребностей решает. Если никто тут ничем помочь не сможет, то лучше на данный момент не найти решения, в котором помимо D&D выделенных файлов, взятых откуда угодно и в любом кол-ве, есть возможность задать уйму условий для обработки в один проход, чего в батнике реализовать будет почти невозможно (в AutoIt разве только). И вместо того, чтобы дерзить, лучше бы спасибо сказали...
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

[mod="CaptainFlint"]Опять перепалка по поводу кто чего и как недопонял? :evil: Марш в личку![/mod]
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Jonmey писал(а):

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

D1 F2 F0 EE EA E0 5F 31 5F EA EE F2 EE F0 F3 FE 5F E8 F9 E5 EC ?? ?? ?? ?? ??
(где ?? - любой байт)
Без масок нельзя?
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Tol!k
Можно, но задача в том, что найти байты, отмеченные вопросами нужно не в любом месте файла, а только там, где перед ними идет конкретный набор байтов.

При этом, список возможных комбинаций байтов идущих перед заменяемями (и которые остаются неизменными) и список возможных комбинаций байтов, которые нужно заменить - известен. Скажем первый набор включает до 10 вариантов, а второй - до 5 (то есть всего не более 50 возможных комбинаций, если прописать все в явном виде)

Суммарная длина строк = предшествующие байты (неизменяемые) + байты для замены = всегда константа (в моем случае - 31 байт)

Комбинация байтов на которую заменить - всегда одна и та же.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

параметры для Батиного скрипта

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

"(\xD1\xF2\xF0\xEE\xEA\xE0\x5F\x31\x5F\xEA\xEE\xF2\xEE\xF0\xF3\xFE\x5F\xE8\xF9\xE5\xEC).{5}" "$1\xD1\xF2\xF0\xEE\xEA" %L
Бэкапы не создаются!
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Замена текста(группа htmlфайлов) из файла ссписка

Сообщение shveicar »

Здравствуйте! На днях столкнулся с такой проблемой - Существует более 100 файлов html. Все они имеют разные имена, но во всех одна и та-же строчка в теге которую нужно заменить, а именно

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

<META HTTP-EQUIV="Refresh" CONTENT="0; URL=prise.zip">
(заменить нужно prise.zip) Замена должна производиться из тексового файла в котором список ссылок для замены. Пример
  • сам файл - filelist.txt

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

Flo-001-HawaiianBeauty.wmv
Flo-002-WetTshirt.wmv
Flo-003-Interview.wmv
Естественно число html файлов и число ссылок в текстовом файле совпадают, то есть в каждом выделенном файле html производится замена одной ссылки на одну ссылку по порядку из текстового файла списка. пример
  • файл имя 1 html (замена тега внутри) prise.zip на Flo-001-HawaiianBeauty.wmv
  • файл имя 2.html (замена тега внутри)prise.zip на Flo-002-WetTshirt.wmv
и так далее по списку. Если возможно создать такой скрипт - буду очень признателен, поскольку существующие программы типа text pipe - могут менять только одну ссылку в одном файле и к сожалению не всегда корректно. Спасибо.
Последний раз редактировалось shveicar Пт июн 24, 2011 15:13, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Batya »

shveicar
vbs-скрипт:

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

'================================================================================
' Замена текста в файлах с помощью шаблонов.
' Шаблоны:
'   %Name%        - имя файла с расширением;
'   %FromFileArr% - значение из соответствующей строки файла {файл со значениями замены}.
'
' Параметры:
' {текст для поиска} {текст для замены с шаблонами} {режим кавычек} {файл-список} [{файл со значениями замены}]
' где {режим кавычек}:
'   0 - без учёта (по умолчанию),
'   1 - считать одинарные кавычки в тексте для поиска\замены двойными
'================================================================================
Option Explicit
Dim FSO, WSH, F, FF, Mode, Str1, Str2, Errors, i, FZ, ArrZ
Set FSO    = CreateObject("Scripting.FileSystemObject")
Set WSH    = CreateObject("WScript.Shell")
Set Errors = CreateObject("Scripting.Dictionary")
With WScript
  Str1 = .Arguments(0)
  Str2 = .Arguments(1)
  Mode = .Arguments(2)
  FF   = .Arguments(3)
  If .Arguments.Count > 4 Then FZ = .Arguments(4)
End With

If InStr(1, Str2, "%FromFileArr%", 1) > 0 Then
  ArrZ = Split(FSO.OpenTextFile(FZ, 1).ReadAll, vbNewLine, -1, 1)
End If

If Mode = 1 Then
  Str1 = Replace(Str1, "'", """")
  Str2 = Replace(Str2, "'", """")
End If

i = 0
On Error Resume Next
With FSO.OpenTextFile(FF, 1)
  Do While Not .AtEndOfStream
    i = i + 1
    F = Trim(.ReadLine)
    If F <> "" Then
      F = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(F))
      If FSO.FileExists(F) Then
        ReplaceInFile F, Str1, Str2, i
        If Err.Number > 0 Then
          Errors.Add F, Err.Description
          Err.Clear
        End If
      End If
    End If
  Loop
  .Close
End With
On Error GoTo 0

If Errors.Count > 0 Then MsgBox JoinErr(Errors), 0, "Замена текста в файлах с помощью шаблонов"

Set Errors = Nothing
Set WSH    = Nothing
Set FSO    = Nothing
WScript.Quit 0

Sub ReplaceInFile(pPath, pStr1, pStr2, pLevel)
  Dim lText
  If FSO.GetFile(pPath).Size > 0 Then
    lText = FSO.OpenTextFile(pPath, 1, False, 0).ReadAll
    If InStr(lText, pStr1) > 0 Then
      lText = Replace(lText, pStr1, TemplReplace(pPath, pStr2, pLevel))
      FSO.OpenTextFile(pPath, 2).Write lText
    End If
  End If
End Sub

Function JoinErr(pDic)
  Dim lKey
  For Each lKey In pDic
    JoinErr = JoinErr & vbNewLine & _
              "Файл """ & lKey & """ - " & pDic(lKey)
  Next
  JoinErr = "Для следующих файлов операция завершена с ошибками:" & vbNewLine & JoinErr
End Function

'Функция замены с помощью шаблонов
Function TemplReplace(pPath, pText, pLevel)
  Dim lText, lRepl
  lText = pText
  lText = Replace(lText, "%Name%", FSO.GetFile(pPath).Name)
  If IsArray(ArrZ) Then
    If UBound(ArrZ) < (pLevel - 1) Then
      lRepl = ""
    Else
      lRepl = ArrZ(pLevel - 1)
    End If
    lText = Replace(lText, "%FromFileArr%", lRepl)
  End If
  TemplReplace = lText
End Function
Кнопка для твоего случая:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\WHS\TemplReplace.vbs
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=prise.zip'>" "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=%%FromFileArr%%'>" 1 %L filelist.txt
shell32.dll,1
Массовая замена



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

Спасибо за помощь

Сообщение shveicar »

Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Мои действия - выделяю группу -html файлов вида 1.html , 2.html и тд
список с именами замен filelist.txt находится в той же папке что и сам скрипт, пробовал также класть его в папку с файлами html жму кнопку- и тишина. (надеюсь имя и расположение самого скрипта значения не имеет?)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение shveicar »

Надо либо указывать в параметрах полный путь к filelist.txt либо класть его в одну папку со скриптом.
Так я проверял с разными путями результат одинаковый-(ничего не происходит)

Добавлено спустя 6 минут:

Может быть дело в самом коде html - на всякий случай привожу полное содержание html файла

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

<HTML><HEAD><META HTTP-EQUIV="Refresh" CONTENT="0; URL=prise.zip"><TITLE>302 File moved</TITLE></HEAD></HTML>
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Batya »

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

Сообщение shveicar »

Ну конечно, речь идет именно о замене фрагмента текста в теге, как я и пытался (видимо не совсем понятно) объяснить. Спасибо, буду ждать.
Ответить