| | DrZoltsberg 
 Newbie
 | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ilicho42
 
 
 Цитата:
 | http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=1440 
 Доброго времени суток!
 Решил облегчить себе жизнь, но как то получилось не очень...
 В сети есть несколько проксиков и нужно перевести пользователей qip с одного проксика
 на другой. Хранит qip конфиг в текстовом файле и нужно всего лишь заменить там несколько строк.
 ... нужно изменить строку Port=5190 на Port=443
 | 
 
 Небольшой парсер с прогресс каунтером тебе в помощь :) надеюсь что не поздно.
 
 
 Код:
 | 
 @echo off
 setlocal enabledelayedexpansion
 
 :: Задать путь к inputfile для парсинга. Результат в outputfile.
 
 set inputfile="input.txt"
 set outputfile="output.txt"
 set tempfile="temp.txt"
 
 :: В ctrlenter символ ctrl-enter счётчика обработанных линий. Набирается в Edit.
 
 set ctrlenter=
 set /a linecount=0
 if exist %outputfile% del %outputfile% >NUL
 >%tempfile% find /N /V "bla_bla_bla" %inputfile%
 for /f "skip=2 tokens=1,2 delims==" %%a in ('type %tempfile% 2^>NUL') do (call :parser "%%a" "%%b")
 if exist %tempfile% del %tempfile% >NUL
 goto :eof
 
 :parser
 set /a linecount+=1
 <NUL set /p progress=%ctrlenter%
 for /l %%a in (0,1,18) do <NUL set /p progress=%progress%%ctrlenter%
 <NUL set /p progress=%progress%Parsing line %linecount%
 if "%~2"=="" (set parsevalue=%~2) else (set parsevalue==%~2)
 
 :: Заменяемые значения
 ::
 :: if "%~2"=="xxx1" set parsevalue==yyy1
 :: if "%~2"=="xxx2" set parsevalue==yyy2
 ::                            ...
 ::
 :: Внимание ! в файле inputfile значение вида AAA= т.е. пустое равенство должно
 :: заканчиваться хотя бы одним пробелом после знака равенства. Также не перевариваются
 :: и вызывают крах скрипта или неверный результат в outputfile спецсимволы < > & | ^ % " '
 
 if "%~2"=="5190" set parsevalue==443
 
 set string=%~1
 :parsenextchar
 if "%string:~0,1%"=="]" goto parseline
 set string=%string:~1%
 goto parsenextchar
 :parseline
 set string=%string:~1%
 if "%string%"=="" echo.>>%outputfile%&goto :eof
 >>%outputfile% echo %string%%parsevalue%
 goto :eof
 
 
 | 
 
 ЗЫ:
 
 Да если просто скопировать скрипт в файл то работать не будет. Причина в том, что при копировании со страницы  в конец каждой строки добавляется пробел :( (как и указано вверху страницы). Чтобы работало после копирования скрипта в файл необходимо удалить добавленные пробелы в конце каждой строки. Нераспознаваемый символ в кодировке ASCII (DOS) удалять не нужно.
 
 ЗЗЫ:
 
 Другой вариант парсера, не требующий чтобы равенство вида AAA= заканчивалось пробелом (т.е. не требующий какого-либо предварительного редактирования модифицируемого файла) дабы не заспамлять форум находится здесь
 
 http://d e p o s i t f i l e s . c o m/files/j1nxf9y8q
 
 Подопытный файл из квипа:
 
 http://d e p o s i t f i l e s . c o m/files/cfcays3mx
 |  | Всего записей: 3 | Зарегистр. 20-11-2008 | Отправлено:  18:06 20-11-2008  | Исправлено: DrZoltsberg,   23:54 25-11-2008
 | 
 |