Страница 3 из 5
Добавлено: Вс мар 06, 2011 23:49
Jonmey
Flasher
Бинарность файла не указывает на то, в каком формате нужно обрабатывать файл.
Ну это разве что для вас бинарность не показатель и вы редактируете такие файлы в Блокноте, а для всех остальных - это означает шестнадцатеричное редактирование со всеми вытекающими.
Если у вас нет конкретного решения соответствующего заданным выше условиям, то вы меня очень обяжете, если воздержитесь далее от пустых разговоров на эту тему.
Добавлено: Пн мар 07, 2011 00:03
Flasher
Jonmey писал(а):и вы редактируете такие файлы в Блокноте
Это что ещё за глупость? Ах, да, сейчас уже начинаю припоминать причину подобных "выводов"...
Jonmey писал(а):а для всех остальных - это означает шестнадцатеричное редактирование со всеми вытекающими
Только за остальных говорить не надо, а уж тем более за всех, подавляющая масса которых даже представления об этом не имеет.
Jonmey писал(а):Если у вас нет конкретного решения соответствующего заданным выше условиям, то вы меня очень обяжете, если воздержитесь далее от пустых разговоров на эту тему.
Пустые разговоры - это утверждение того, что не соответствует действительности, что можно наблюдать в предыдущих
ваших постах. Я предложил средство автоматизации, которое основную часть указанных потребностей решает. Если никто тут ничем помочь не сможет, то лучше на данный момент не найти решения, в котором помимо D&D выделенных файлов, взятых откуда угодно и в любом кол-ве, есть возможность задать уйму условий для обработки в один проход, чего в батнике реализовать будет почти невозможно (в AutoIt разве только). И вместо того, чтобы дерзить, лучше бы спасибо сказал
и...
Добавлено: Пн мар 07, 2011 12:35
CaptainFlint
[mod="CaptainFlint"]Опять перепалка по поводу кто чего и как недопонял?

Марш в личку![/mod]
Добавлено: Пн мар 07, 2011 17:46
Tol!k
Jonmey писал(а):Код: Выделить всё
D1 F2 F0 EE EA E0 5F 31 5F EA EE F2 EE F0 F3 FE 5F E8 F9 E5 EC ?? ?? ?? ?? ??
(где ?? - любой байт)
Без масок нельзя?
Добавлено: Пн мар 07, 2011 18:36
Jonmey
Tol!k
Можно, но задача в том, что найти байты, отмеченные вопросами нужно не в любом месте файла, а только там, где перед ними идет конкретный набор байтов.
При этом, список возможных комбинаций байтов идущих перед заменяемями (и которые остаются неизменными) и список возможных комбинаций байтов, которые нужно заменить - известен. Скажем первый набор включает до 10 вариантов, а второй - до 5 (то есть всего не более 50 возможных комбинаций, если прописать все в явном виде)
Суммарная длина строк = предшествующие байты (неизменяемые) + байты для замены = всегда константа (в моем случае - 31 байт)
Комбинация байтов на которую заменить - всегда одна и та же.
Добавлено: Пн мар 07, 2011 21:25
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
Бэкапы не создаются!
Замена текста(группа htmlфайлов) из файла ссписка
Добавлено: Пт июн 24, 2011 13:05
shveicar
Здравствуйте! На днях столкнулся с такой проблемой - Существует более 100 файлов html. Все они имеют разные имена, но во всех одна и та-же строчка в теге которую нужно заменить, а именно
Код: Выделить всё
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=prise.zip">
(заменить нужно
prise.zip) Замена должна производиться из тексового файла в котором список ссылок для замены. Пример
Код: Выделить всё
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 - могут менять только одну ссылку в одном файле и к сожалению не всегда корректно. Спасибо.
Добавлено: Пт июн 24, 2011 13:51
Flasher
shveicar писал(а):программы типа text pipe - могут менять только одну ссылку в одном файле и к сожалению не всегда корректно.
Есть полно других многопроходных программ и скрипт, ссылку на который я приводил во втором посте, но суть не в этом. Тут и вправду отдельный скрипт нужен. Вроде несложно. Посмотрим как со временем.
Добавлено: Пт июн 24, 2011 14:15
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
Из-за проблем передачи параметров, содержащих кавычки, пришлось ввести параметр {режим кавычек}.
Спасибо за помощь
Добавлено: Пт июн 24, 2011 15:11
shveicar
Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Мои действия - выделяю группу -html файлов вида 1.html , 2.html и тд
список с именами замен filelist.txt находится в той же папке что и сам скрипт, пробовал также класть его в папку с файлами html жму кнопку- и тишина. (надеюсь имя и расположение самого скрипта значения не имеет?)
Добавлено: Пт июн 24, 2011 15:23
Flasher
shveicar
Надо либо указывать в параметрах полный путь (лучше в кавычках) к filelist.txt либо класть его в одну папку со скриптом.
Добавлено: Пт июн 24, 2011 15:36
shveicar
Надо либо указывать в параметрах полный путь к filelist.txt либо класть его в одну папку со скриптом.
Так я проверял с разными путями результат одинаковый-(ничего не происходит)
Добавлено спустя 6 минут:
Может быть дело в самом коде html - на всякий случай привожу полное содержание html файла
Код: Выделить всё
<HTML><HEAD><META HTTP-EQUIV="Refresh" CONTENT="0; URL=prise.zip"><TITLE>302 File moved</TITLE></HEAD></HTML>
Добавлено: Пт июн 24, 2011 15:38
Flasher
shveicar
В каком смысле "с разными"? Путь должен соответствовать местонахождению файла. Но это в случае, если файл не положен в одну папку со скриптом. И кавычки при пробелах должны быть учтены. Режимы оба пробовались?
Добавлено: Пт июн 24, 2011 15:55
Batya
shveicar писал(а):Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Мои действия - выделяю группу -html файлов вида 1.html , 2.html и тд
список с именами замен filelist.txt находится в той же папке что и сам скрипт
Изначально я понял задачу не так, как сейчас описывается процедура проверки.
Я считал, что в файле filelist.txt лежит список файлов для замены, а не заменяемый текст.
Чуть позже сделаю под твой вариант.
Добавлено: Пт июн 24, 2011 16:20
shveicar
Ну конечно, речь идет именно о замене фрагмента текста в теге, как я и пытался (видимо не совсем понятно) объяснить. Спасибо, буду ждать.