Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?!

Ответить
Настройки темы
CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?!

Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добрый день!
Есть необходимость построчно проанализировать содержимое текстового файла. Никак не могу определиться с синтаксисом.
@for /f "tokens=*" %%A in (c:\text.txt) do @echo %%A – не работает

Отправлено: 15:52, 04-02-2008

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
У меня есть скрипт (код), »
Покажите образец этого «скрипт (код)».

Цитата Burning Hell:
в котором я хочу найти несколько фраз »
Каких? Перечислите.

Цитата Burning Hell:
и вырезать из этих фраз подстроки. »
По какому принципу подстроки должны определяться внутри строки?

Отправлено: 15:49, 26-07-2017 | #21



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Покажите образец этого «скрипт (код)». »
Скрипт написан на SAS/Macro. Выглядит примерно так:
Код: Выделить весь код
%global vaRepLib vaRepLib lasr_port lasr_engine lasr_tag lasr_host lasr_signer lasr_options metaport metaprotocol metarepository lasr_sig_files_path;
			
%let vaRepLib = lasrlib;
%let lasr_port = 2289;
%let lasr_engine = sasiola;
%let lasr_tag = va_pub;
%let lasr_host = sas-vaar.dev.rnw;
%let lasr_signer = %str("http://sas-metadata.dev.rnw:85/SASLASRAuthorization");
%let lasr_options = %str(tag=&lasr_tag port=&lasr_port host="&lasr_host" signer=&lasr_signer);
Цитата Iska:
Каких? Перечислите. »
Хотелось бы найти строчку с переменной lasr_port и вырезать в переменную число после знака "=". То же самое с переменной
lasr_host.

Отправлено: 15:56, 26-07-2017 | #22


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
Скрипт написан на SAS/Macro. Выглядит примерно так: »
На всякий случай — кодировка его какая?

Цитата Burning Hell:
Хотелось бы найти строчку с переменной lasr_port и вырезать в переменную число после знака "=". То же самое с переменной
lasr_host. »
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Мои проекты\0102\0001.txt

if exist "%sSourceFile%" (
	for /f "usebackq tokens=2,3 delims==; " %%i in (
		`type "%sSourceFile%" ^| findstr.exe /i /r /c:"%%let lasr_port = [0-9]*;"`
	) do set s%%i=%%j

	if defined slasr_port (
		echo [!slasr_port!]
	) else (
		echo Not found [lasr_port]
	)

	for /f "usebackq tokens=2,3 delims==; " %%i in (
		`type "%sSourceFile%" ^| findstr.exe /i /r /c:"%%let lasr_host = .*;"`
	) do set s%%i=%%j

	if defined slasr_host (
		echo [!slasr_host!]
	) else (
		echo Not found [slasr_host]
	)

) else (
	echo Can't find source file [%sSourceFile%].
	exit /b 1
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:22, 26-07-2017 | #23


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
На всякий случай — кодировка его какая? »
UTF-8 w/o BOM

Отправлено: 16:28, 26-07-2017 | #24


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
UTF-8 w/o BOM »
Тогда сойдёт (пока кириллицу из файла получать не понадобится ).

Отправлено: 16:41, 26-07-2017 | #25


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Iska, возникло несколько вопросов.

Что означает вот этот оператор
Цитата Iska:
set s%%i=%%j »
?

Для чего нужны квадратные скобки
Цитата Iska:
[!slasr_host!] »
и что такое slasr_port? Откуда он берется?

Также я не очень понял, что делают вот эти два параметра после setlocal:

Цитата Iska:
setlocal enableextensions enabledelayedexpansion »
Цитата Iska:
Тогда сойдёт (пока кириллицу из файла получать не понадобится ). »
Там кириллицы по определению не может быть, это же код, исполняемый файл)

Последний раз редактировалось Burning Hell, 26-07-2017 в 17:06.


Отправлено: 16:45, 26-07-2017 | #26


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
Что означает вот этот оператор »
Цитата Burning Hell:
что такое slasr_port? Откуда он берется? »
Строка в файле выглядит как:
Код: Выделить весь код
%let lasr_port = 2289;
Посредством цикла разбора for /f "usebackq tokens=2,3 delims==; " мы разбиваем её на составляющие:
Код: Выделить весь код
%let lasr_port = 2289;
и выбираем второй и третий токены в %%i и %%j соответственно. Таким образом строка:
Код: Выделить весь код
set s%%i=%%j
выполняется как:
Код: Выделить весь код
set slasr_port=2289
s я просто добавляю как префикс для получаемой переменной окружения. Привычка.

Цитата Burning Hell:
Для чего нужны квадратные скобки »
Для правильного восприятия. Например, чтобы визуально видеть обрамляющие пробелы, которые без ограничителей [] будут не видны.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:05, 26-07-2017 | #27


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Iska, правильно я понял, что
Цитата Iska:
.* »
последовательность любых символов ?

Отправлено: 17:16, 26-07-2017 | #28


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Burning Hell, правильно. В том числе и пустая последовательность. К сожалению, реализация регулярок у findstr.exe весьма куцая.

Отправлено: 17:22, 26-07-2017 | #29


Ветеран


Contributor


Сообщения: 2727
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Как вариант (если после равно в строке всякие спкцсимволы - не годится)
Код: Выделить весь код
@Echo Off
cls

Set "FileIn=Z:\Box_In\In File.txt"
Set "Key=let"

FOR /F "usebackq tokens=1,2,3 delims==; " %%i IN (`more "%FileIn%" 2^>nul`) DO (
	Call :Ident "lasr_port" "%%i" "%%j" "%%k"
	Call :Ident "lasr_host" "%%i" "%%j" "%%k"

rem Остальные три строки вставил как пример возможности
	Call :Ident "vaRepLib" "%%i" "%%j" "%%k"
	Call :Ident "lasr_engine" "%%i" "%%j" "%%k"
	Call :Ident "lasr_tag" "%%i" "%%j" "%%k"
)
Echo %lasr_port%
Echo %lasr_host%

Echo %vaRepLib%
Echo %lasr_engine%
Echo %lasr_tag%

pause
GoTo :Eof

:Ident
	If /I %2=="%Key%" If /I %1==%3 Set "%~1=%~4"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 27-07-2017 в 11:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:22, 26-07-2017 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание текстового файла при условии его отсутствия в папке spilberg Скриптовые языки администрирования Windows 1 12-07-2009 15:58
[решено] Чтение текстового файла с неизвестным именем ZeroCrash AutoIt 4 01-07-2009 19:03
[решено] Заполнение формы на сайте, но с данными из текстового файла ZeroCrash AutoIt 2 24-06-2009 11:04
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
CMD/BAT - [решено] вывод текстового файла на экран cmd idsp Скриптовые языки администрирования Windows 6 06-04-2009 07:18




 
Переход