Автоматизация замены текста в конфиге.
Нужен скрипт/софтина/плагин np++ для массовой замены переменных в конфиге который периодически восстанавливается в исходное значение.
Предположим имеется файл с текстом:
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
Через np++ нужно каждую строчку менять отдельно или же писать макрос, но отредактировать макрос нельзя, только писать с начала. Через Text Replacer можно заменить подряд несколько строчек, а не в разных местах файла.
|
Цитата:
Цитата ANIMka
Предположим имеется файл с текстом: »
|
Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск.
Цитата:
Цитата ANIMka
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33". »
|
Укажите, что и на что конкретно нужно заменить.
P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет?
|
Цитата:
Цитата Iska
Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
|
Зачем ? мой пример текста недостаточно подробный ?
Цитата:
Цитата Iska
P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет? »
|
Нет, потому что новая версия файла постоянно дополняется, но после каждого обновления требуется вносить старые правки не удаляя при этом ничего лишнего.
https://youtu.be/d1If9TOmgik
|
Цитата:
Цитата ANIMka
Зачем ? мой пример текста недостаточно подробный ? »
|
Он ни о чём.
|
В текстовом файле есть переменная <option name="use-otp2" value="false"/> которую нужно заменить на <option name="use-otp2" value="true"/>, подобных переменных которые нужно менять каждый раз много и они идут не подряд.
|
ANIMka, я уже сказал, что требуется и сам файл:
Цитата:
Цитата Iska
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
|
Не хотите — дело Ваше, уговаривать не стану.
Цитата:
Цитата ANIMka
подобных переменных которые нужно менять каждый раз много и они идут не подряд. »
|
Перечислите все их, укажите на что менять каждую.
|
Цитата:
Цитата Iska
Не хотите — дело Ваше, уговаривать не стану. »
|
http://rgho.st/6qZwW6KSf
Нужно поменять <option name="use-sns-following" value="false"/> на <option name="use-sns-following" value="true"/> и <option name="use-powerbook" value="false"/> на <option name="use-powerbook" value="true"/>
|
Это не xml-файл, а некий его огрызок.
|
Цитата:
Цитата Iska
Это не xml-файл, а некий его огрызок. »
|
Извиняюсь конечно, но какая разница ?
|
xml-парсер работает с валидными xml-файлами, но не с их огрызками.
|
Мне нужно решение которое будет актуально при работе с любыми текстовыми файлами, а не только с данным конкретным xml.
|
WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами.
|
Цитата:
Цитата Iska
WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами. »
|
Я почти не разбираюсь в командах и не смогу написать подобный скрипт самостоятельно.
Копаясь по форуму я уже наткнулся на одно из ваших сообщений, но к сожалению не могу его подогнать под свои нужды из-за конфликтов с ковычками.
|
ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык.
Цитата:
Цитата ANIMka
Копаясь по форуму я уже наткнулся на одно из ваших сообщений, но к сожалению не могу его подогнать под свои нужды из-за конфликтов с ковычками. »
|
Вы можете его приспособить под один конкретный случай, не более. Как только в Вашем xml-файле окажется кирилица в UTF-8 — он обломается.
|
Цитата:
Цитата Iska
ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык. »
|
Понял.
Цитата:
Цитата Iska
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »
|
Вот целиковый xml
|
Цитата:
Цитата ANIMka
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
»
|
замена в file.txt
Код:
fnr.exe --cl --dir %1 --fileMask "file*.txt" --excludeFileMask "*.dll, *.exe" --skipBinaryFileDetection --showEncoding --alwaysUseEncoding "cp866" --find "a=1" --replace "a=11"
fnr.exe --cl --dir %1 --fileMask "file*.txt" --excludeFileMask "*.dll, *.exe" --skipBinaryFileDetection --showEncoding --alwaysUseEncoding "cp866" --find "c=3" --replace "c=33"
pause
fnr тут https://findandreplace.codeplex.com/
|
Я, к сожалению, не нашёл в нём:
ни первого, ни второго:
Цитата:
Цитата ANIMka
Нужно поменять <option name="use-sns-following" value="false"/> на <option name="use-sns-following" value="true"/> и <option name="use-powerbook" value="false"/> на <option name="use-powerbook" value="true"/> »
|
Ну, да ладно. Предположим, что требуется задать значения атрибута «value» указанных узлов:
Выглядеть сие может примерно так:
Скрытый текст
Код:
Option Explicit
Dim strSourceFile
If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strSourceFile) Then
With WScript.CreateObject("Microsoft.XMLDOM")
.load(strSourceFile)
.selectSingleNode("/config/group[@name='input']/option[@name='use-recommend-key']").setAttribute "value", "false"
.selectSingleNode("/config/group[@name='input']/option[@name='process-key-when-skill-finish']").setAttribute "value", "false"
.selectSingleNode("/config/group[@name='mouse']/option[@name='left-click-move']").setAttribute "value", "no"
.selectSingleNode("/config/group[@name='mouse']/option[@name='right-click-move']").setAttribute "value", "yes"
.save(strSourceFile)
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
|
Amigos, что я делаю не так ?
Iska, Работает, но попытавшись добавить свою переменную у меня возникла проблемка.
|
ANIMka, там будет другой путь XPath.
Смотрите, сначала у нас идёт узел config, внутри него узел group с атрибутом name со значением camera, внутри него узел group с атрибутом name со значением player, внутри него узел option с атрибутом far-cam-height-jin-m со значением, которое нужно задать. Таким образом, путь можно указать таким:
Код:
/config/group[@name='camera']/group[@name='player']/option[@name='far-cam-height-jin-m']
и в коде:
Код:
.selectSingleNode("/config/group[@name='camera']/group[@name='player']/option[@name='far-cam-height-jin-m']").setAttribute "value", "62.000000"
|
Iska, Благодарю, вы очень помогли.
|
ANIMka, не за что. Будут вопросы — пишите, посмотрим (с учётом того, что я совсем не специалист по xml — не я, так более опытные коллеги помогут).
|
Вот тут ошибка у меня Я взял цельный кусок батника, запускавшегося из SFX и ему текущий каталог передавал SFX
нужно вместо %1 забить путь к файлу
|
Время: 22:36.
© OSzone.net 2001-