Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   [решено] Автоматизация замены текста в конфиге. (http://forum.oszone.net/showthread.php?t=323161)

ANIMka 26-01-2017 05:59 2706296

Автоматизация замены текста в конфиге.
 
Нужен скрипт/софтина/плагин np++ для массовой замены переменных в конфиге который периодически восстанавливается в исходное значение.

Предположим имеется файл с текстом:
Код:

a=1
b=2
c=3

В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
Код:

a=11
b=2
c=33

Через np++ нужно каждую строчку менять отдельно или же писать макрос, но отредактировать макрос нельзя, только писать с начала. Через Text Replacer можно заменить подряд несколько строчек, а не в разных местах файла.

Iska 26-01-2017 08:19 2706312

Цитата:

Цитата ANIMka
Предположим имеется файл с текстом: »

Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск.

Цитата:

Цитата ANIMka
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33". »

Укажите, что и на что конкретно нужно заменить.

P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет?

ANIMka 26-01-2017 09:41 2706331

Цитата:

Цитата Iska
Без предположений — упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »

Зачем ? мой пример текста недостаточно подробный ?
Цитата:

Цитата Iska
P.S. А простое тупое копирование «правильного» варианта файла поверх «восстановленного» не поможет? »

Нет, потому что новая версия файла постоянно дополняется, но после каждого обновления требуется вносить старые правки не удаляя при этом ничего лишнего.

https://youtu.be/d1If9TOmgik

freese 26-01-2017 09:59 2706335

ANIMka, возможно подойдет
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки

Iska 26-01-2017 13:11 2706388

Цитата:

Цитата ANIMka
Зачем ? мой пример текста недостаточно подробный ? »

Он ни о чём.

ANIMka 26-01-2017 15:23 2706430

Цитата:

Цитата Iska
Он ни о чём. »

В текстовом файле есть переменная <option name="use-otp2" value="false"/> которую нужно заменить на <option name="use-otp2" value="true"/>, подобных переменных которые нужно менять каждый раз много и они идут не подряд.

Iska 26-01-2017 15:32 2706433

ANIMka, я уже сказал, что требуется и сам файл:
Цитата:

Цитата Iska
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »

Не хотите — дело Ваше, уговаривать не стану.

Цитата:

Цитата ANIMka
подобных переменных которые нужно менять каждый раз много и они идут не подряд. »

Перечислите все их, укажите на что менять каждую.

ANIMka 26-01-2017 15:59 2706442

Цитата:

Цитата 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"/>

Iska 26-01-2017 16:04 2706443

Это не xml-файл, а некий его огрызок.

ANIMka 26-01-2017 16:07 2706444

Цитата:

Цитата Iska
Это не xml-файл, а некий его огрызок. »

Извиняюсь конечно, но какая разница ?

Iska 26-01-2017 16:34 2706449

xml-парсер работает с валидными xml-файлами, но не с их огрызками.

ANIMka 26-01-2017 16:54 2706454

Мне нужно решение которое будет актуально при работе с любыми текстовыми файлами, а не только с данным конкретным xml.

Iska 26-01-2017 17:11 2706456

WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами.

ANIMka 26-01-2017 17:20 2706458

Цитата:

Цитата Iska
WSH или PowerShell — на выбор. Будет актуально всегда и с любыми текстовыми файлами. »

Я почти не разбираюсь в командах и не смогу написать подобный скрипт самостоятельно.

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

Iska 26-01-2017 18:32 2706477

ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык.

Цитата:

Цитата ANIMka
Копаясь по форуму я уже наткнулся на одно из ваших сообщений, но к сожалению не могу его подогнать под свои нужды из-за конфликтов с ковычками. »

Вы можете его приспособить под один конкретный случай, не более. Как только в Вашем xml-файле окажется кирилица в UTF-8 — он обломается.

ANIMka 27-01-2017 01:08 2706576

Цитата:

Цитата Iska
ANIMka, чудес не бывает. Чем более универсальное решение требуется — тем шире и сложнее становится входной язык. »

Понял.
Цитата:

Цитата Iska
упакуйте файл в архив, каковой выложите на RGhost или Яндекс.Диск. »

Вот целиковый xml

Amigos 27-01-2017 12:33 2706673

Цитата:

Цитата ANIMka
В нем нужно заменить "a=1" на "a=11" и "c=3" на "c=33".
Что бы стало так:
Код:

a=11
b=2
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/

Iska 27-01-2017 13:24 2706688

Я, к сожалению, не нашёл в нём:
Цитата:

Цитата ANIMka
Вот целиковый xml »

ни первого, ни второго:
Цитата:

Цитата 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


ANIMka 27-01-2017 13:52 2706703

Amigos, что я делаю не так ?
Скрытый текст


Iska, Работает, но попытавшись добавить свою переменную у меня возникла проблемка.
Скрытый текст

Iska 27-01-2017 14:09 2706709

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"

ANIMka 27-01-2017 16:15 2706743

Iska, Благодарю, вы очень помогли.

Iska 27-01-2017 16:27 2706745

ANIMka, не за что. Будут вопросы — пишите, посмотрим (с учётом того, что я совсем не специалист по xml — не я, так более опытные коллеги помогут).

Amigos 27-01-2017 19:10 2706784

Цитата:

Цитата ANIMka
что я делаю не так ? »

Вот тут ошибка у меня
Цитата:

Цитата Amigos
--dir %1 »

Я взял цельный кусок батника, запускавшегося из SFX и ему текущий каталог передавал SFX
нужно вместо %1 забить путь к файлу


Время: 22:36.

Время: 22:36.
© OSzone.net 2001-