Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Редактирование файлов (вырезать, вставить, массово)
Goto page Previous  1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Mon Mar 07, 2011 00:49    Post subject: Reply with quote

Flasher
Quote:
Бинарность файла не указывает на то, в каком формате нужно обрабатывать файл.

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

Если у вас нет конкретного решения соответствующего заданным выше условиям, то вы меня очень обяжете, если воздержитесь далее от пустых разговоров на эту тему.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Mar 07, 2011 01:03    Post subject: Reply with quote

Jonmey wrote:
и вы редактируете такие файлы в Блокноте
Это что ещё за глупость? Ах, да, сейчас уже начинаю припоминать причину подобных "выводов"...
Jonmey wrote:
а для всех остальных - это означает шестнадцатеричное редактирование со всеми вытекающими
Только за остальных говорить не надо, а уж тем более за всех, подавляющая масса которых даже представления об этом не имеет.

Jonmey wrote:
Если у вас нет конкретного решения соответствующего заданным выше условиям, то вы меня очень обяжете, если воздержитесь далее от пустых разговоров на эту тему.
Пустые разговоры - это утверждение того, что не соответствует действительности, что можно наблюдать в предыдущих ваших постах. Я предложил средство автоматизации, которое основную часть указанных потребностей решает. Если никто тут ничем помочь не сможет, то лучше на данный момент не найти решения, в котором помимо D&D выделенных файлов, взятых откуда угодно и в любом кол-ве, есть возможность задать уйму условий для обработки в один проход, чего в батнике реализовать будет почти невозможно (в AutoIt разве только). И вместо того, чтобы дерзить, лучше бы спасибо сказали...
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6193
Location: Москва

Post (Separately) Posted: Mon Mar 07, 2011 13:35    Post subject: Reply with quote

 !  CaptainFlint:
Опять перепалка по поводу кто чего и как недопонял? Evil or Very Mad Марш в личку!

_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Mar 07, 2011 18:46    Post subject: Reply with quote

Jonmey wrote:
Code:
D1 F2 F0 EE EA E0 5F 31 5F EA EE F2 EE F0 F3 FE 5F E8 F9 E5 EC ?? ?? ?? ?? ??
(где ?? - любой байт)

Без масок нельзя?
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Mon Mar 07, 2011 19:36    Post subject: Reply with quote

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

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

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

Комбинация байтов на которую заменить - всегда одна и та же.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Mar 07, 2011 22:25    Post subject: Reply with quote

параметры для Батиного скрипта
Code:
"(\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

Бэкапы не создаются!
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Jun 24, 2011 13:05    Post subject: Замена текста(группа htmlфайлов) из файла ссписка Reply with quote

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

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


Last edited by shveicar on Fri Jun 24, 2011 15:13; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Jun 24, 2011 13:51    Post subject: Reply with quote

shveicar wrote:
программы типа text pipe - могут менять только одну ссылку в одном файле и к сожалению не всегда корректно.
Есть полно других многопроходных программ и скрипт, ссылку на который я приводил во втором посте, но суть не в этом. Тут и вправду отдельный скрипт нужен. Вроде несложно. Посмотрим как со временем.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Fri Jun 24, 2011 14:15    Post subject: Reply with quote

shveicar
vbs-скрипт:
Code:
'================================================================================
' Замена текста в файлах с помощью шаблонов.
' Шаблоны:
'   %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

Кнопка для твоего случая:
Quote:
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

Из-за проблем передачи параметров, содержащих кавычки, пришлось ввести параметр {режим кавычек}.
_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Mon Jun 27, 2011 18:09; edited 1 time in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Jun 24, 2011 15:11    Post subject: Спасибо за помощь Reply with quote

Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Мои действия - выделяю группу -html файлов вида 1.html , 2.html и тд
список с именами замен filelist.txt находится в той же папке что и сам скрипт, пробовал также класть его в папку с файлами html жму кнопку- и тишина. (надеюсь имя и расположение самого скрипта значения не имеет?)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Jun 24, 2011 15:23    Post subject: Reply with quote

shveicar
Надо либо указывать в параметрах полный путь (лучше в кавычках) к filelist.txt либо класть его в одну папку со скриптом.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Jun 24, 2011 15:30    Post subject: Reply with quote

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

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

Может быть дело в самом коде html - на всякий случай привожу полное содержание html файла
Code:
<HTML><HEAD><META HTTP-EQUIV="Refresh" CONTENT="0; URL=prise.zip"><TITLE>302 File moved</TITLE></HEAD></HTML>
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Jun 24, 2011 15:38    Post subject: Reply with quote

shveicar
В каком смысле "с разными"? Путь должен соответствовать местонахождению файла. Но это в случае, если файл не положен в одну папку со скриптом. И кавычки при пробелах должны быть учтены. Режимы оба пробовались?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2226
Location: Москва, Россия

Post (Separately) Posted: Fri Jun 24, 2011 15:55    Post subject: Reply with quote

shveicar wrote:
Пытаюсь проверить - жму кнопку скрипта ничего не происходит.
Мои действия - выделяю группу -html файлов вида 1.html , 2.html и тд
список с именами замен filelist.txt находится в той же папке что и сам скрипт

Изначально я понял задачу не так, как сейчас описывается процедура проверки.
Я считал, что в файле filelist.txt лежит список файлов для замены, а не заменяемый текст.
Чуть позже сделаю под твой вариант.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Jun 24, 2011 16:20    Post subject: Reply with quote

Ну конечно, речь идет именно о замене фрагмента текста в теге, как я и пытался (видимо не совсем понятно) объяснить. Спасибо, буду ждать.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5  Next
Page 3 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group