Smitis
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору hacsoft МАЛЕНЬКИЙ ликбез по обработке строк и текстовых файлов, а то что-то много вопросов На сначала ПРЕДУПРЕЖДЕНИЕ: Командный процессор имеет весьма ограниченные возможности по обработке содержимого текстовых файлов. Все его средства ореентированы в первую очередь на обработку различных системных текстовых файлов (например логов) с чёткой и простой структурой строк. На ПРОИЗВОЛЬНЫХ текстовых файлах, содержащих специальные символы (те же кавычки, например) процессор легко обламается. Могут возникнуть проблемы и с национальными кодовыми таблицами. И это всё только для линейки NT - NT4, 2000, XP, 2003... (NT4 с ограничениями). Командный процессор для Windows9x/ME не имеет даже этих возможностей. 1. Основная команда для обработки текстовых файлов: for /f Напрмер: Код: for /f "delims=" %%s in (aaa.txt) do call :sss "%%s" goto:eof :sss :: Сдесь обрабатывается строка из файла echo %~1 | Пояснения: - delims нужен, что бы команда не обрабатывала разделители токенов в строке. - обработка осуществляется в подпрограмме, начинающейся с метки sss, ей передаётся один параметр в кавычках (строка). - Параметры в подпрограмму передаются, как в батник. В самой подпрограмме они также нумеруются %1, %2 и т.д. %0 - имя подпрограммы. Для параметров работает и команда shift. - Вместо вызова подпрограммы через call, можно объеденить несколько команд круглыми скобками. Настоятельно рекомендую почитать help. Как ntcmds.chm, так и то, что выдают команды с ключём /? Команда FOR имеет достаточно много параметров, описание которых не входит в мою задачу. Читайте хелп. 2. Для выделения части строки, записаной в переменную, используются конструкция вида Код: %var:~n,m% %var:~n,-m% %var:~n% | Данная конструкция выделяет m символов строки из переменной var, начиная с символа n. Нумерация символов начинается с нуля. Если m отрицательная, отбрасывается соответсвующее количество символов с конца строки. Если m отсутствует, выделяется строка, начиная с символа n до конца строки. Если n+m больше, чем есть символов, также выделяется строка, начиная с символа n до конца строки. Примеры: Код: set b=1234567890 echo [%b:~0,5%] echo [%b:~0,-2%] echo [%b:~2%] echo [%b:~4,20%] | 3. Для замены в строке используюется конструкция Код: %var:str1=str2% %var:str=% | Данная конструкция производит замену всех последовательностей str1 на str2 в переменной var, либо производит удаление последовательности символов, если str2 не задана. Примеры: Код: set a=aaasssdddfffaaasssdddfff echo [%a:aaa=--%] echo [%a:sss=%] | 4. Для проверки, содержит ли переменная какую-либо последовательность символов, предлагаю, на вскидку, два способа. 4.1. Используем конструкцию замены (удаления). Пример: Код: if "%a:uiop=%" == "%a%" echo Строка не содержит uiop if not "%a:asdf=%" == "%a%" echo Строка содержит asdf | 4.2. Используем штатную команду find как фильтр. Примеры: Код: echo %a% | find /i "asdf" > nul && echo Строка содержит asdf echo %a% | find /i "uiop" > nul || echo Строка не содержит uiop | | Всего записей: 3391 | Зарегистр. 09-02-2003 | Отправлено: 00:36 15-08-2006 | Исправлено: Smitis, 20:23 20-08-2006 |
|