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

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

Ответить
Настройки темы
CMD/BAT - CMD/BAT ограничения for /f tokens

Новый участник


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

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


Доброго времени суток

Имеется csv файл со строкой, где множество значений разделено : и | причем значений больше 60. Пишу код:

Код: Выделить весь код
for /F "tokens=2,31 delims=:|" %%A in (!infile!) do (
if "%%A"=="foo" (
echo "%%B"))
В таком варианте выводит значения "ячейки" 31. Если изменить 31 на любое другое число больше (32, 45, и т.д.) выводится "%B".

Это что, некие ограничения CMD? Пробовал написание без кавычек с экранированием ^. То же самое.

Отправлено: 09:21, 31-08-2018

 

Ветеран


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

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


Цитата hAh0L13:
Имеется csv файл »
Который желательно упаковать в архив и приложить к сообщению.

Цитата hAh0L13:
Если изменить 31 на любое другое число больше (32, 45, и т.д.) выводится "%B". Это что, некие ограничения CMD? »
Это ограничение команды разбора for /f — не более 31 токена. Есть обходные пути (читайте по ссылкам в For - Loop through command output - Windows CMD - SS64.com), но я бы серьёзно задумался над иными способами, нежели пакетные файлы.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:29, 31-08-2018 | #2



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

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


Ветеран


Contributor


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

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


Цитата Iska:
но я бы серьёзно задумался над иными способами, нежели пакетные файлы. »
А я бы задумался, какая конечная цель задачи, что надо поиметь в конце её решения

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

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

Отправлено: 09:59, 31-08-2018 | #3


Ветеран


Contributor


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

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


hAh0L13,
Если из каждой строки csv-файла с разделителями | и : надо выцепить значения с некоторыми номерами-вариант 1
Код: Выделить весь код
@Echo Off
cls

Set "FileIn=Z:\Box_In\тра ля ля.csv" 
Set "N=2 11 31 65 81"

SetLocal EnableExtensions EnableDelayedExpansion

For /F "usebackq delims=" %%s IN ("%FileIn%") DO (
	Set "SS=%%s" &Call :Delim "%%SS:|=:%%" ":" "A" "%N%"
	Echo A2=!A2!  A11=!A11!  A31=!A31!  A65=!A65!  A81=!A81!
)
Pause
GoTo :Eof

:Delim
SetLocal
	Set "S=%1"
	Call Set "S=%%S:%~2=" "%%"
	For %%j In (%~4) Do Set /A Max=%%j
EndLocal &Call :Mass %3 %4 %Max% %S%
GoTo :Eof

:Mass
	Set /A i=1
	:Begin
		For %%j In (%~2) Do If %i%==%%j Set "%~1%%j=%~4"
		Set /A i+=1
	If Not %i% GTR %3 (Shift /4 &GoTo :Begin)
GoTo :Eof
Последовательность номеров N задавайте по возрастанию
В csv файле не должно быть кавычек и всяких спецсимволов
И, очень желательно,
Цитата Iska:
Имеется csv файл »
Который желательно упаковать в архив и приложить к сообщению. »

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


Последний раз редактировалось megaloman, 01-09-2018 в 10:36.


Отправлено: 15:42, 31-08-2018 | #4


Ветеран


Contributor


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

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


hAh0L13,
Если из каждой строки csv-файла с разделителями | и : надо выцепить значения с некоторыми номерами - вариант 2
Код: Выделить весь код
@Echo Off
cls

Set "FileIn=Z:\Box_In\тра ля ля.csv" 
Set "NN=2 11 31 65 81"

SetLocal EnableExtensions EnableDelayedExpansion

For %%i In (%NN%) Do Set /A Max=%%i
For /F "usebackq delims=" %%s IN ("%FileIn%") DO (
	Set "SS=%%s"
	For /L %%n In (1,1,%Max%) Do (
		For /F "tokens=1* delims=|:" %%i IN ("!SS!") DO (
			For %%m In (%NN%) Do If %%n==%%m Set "A%%n=%%i" 
			Set "SS=%%j"
		)
	)
	Echo "A2=!A2!" "A31=!A31!"  "A11=!A11!" "A65=!A65!" "A81=!A81!"
)
pause
GoTo :Eof
Здесь возможна проблема: "вподрядные" с "ничегом" внутри разделители (|| |: |:| и т д) воспринимаются как один разделитель. В предыдущем варианте этой проблемы нет. Не проблема и здесь выкрутиться, но было лень без конкретного файла

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


Последний раз редактировалось megaloman, 01-09-2018 в 10:37.


Отправлено: 18:04, 31-08-2018 | #5


Аватара для YuS_2

Crazy


Contributor


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

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


Начать надо с того, что файл этот совсем не csv, ибо comma-separated values...
Но даже если предположить, что это dsv, то разделитель, всё же, должен быть единым, а не:
Цитата hAh0L13:
множество значений разделено : и | »
В общем, сначала надо определить цель задачи и привести файл в приемлемый формат, а затем уже обрабатывать его... имхо.

-------
scio me nihil scire. Ѫ


Отправлено: 19:42, 31-08-2018 | #6


Ветеран


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

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


Цитата YuS_2:
Начать надо с того, что файл этот совсем не csv, ибо comma-separated values... »
А вдруг там что-нибудь этакое:
Код: Выделить весь код
1,15,28,34.5,"Мама|мыла|раму:Рабы|не:мы:мы:не|рабы|Буря:мглою небо|кроет|Кот учёный",17,24
?

Отправлено: 23:34, 31-08-2018 | #7


Ветеран


Contributor


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

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


Iska,
Результат работы второго варианта скрипта на Вашего ученого сКота
Код: Выделить весь код
1,15,28,34.5,"Мама|мыла|раму:Рабы|не:мы:мы:не|рабы|Буря:мглою небо|кроет|Кот учёный",17,24
" A1=1,15,28,34.5,"Мама"
" A2=мыла"
" A3=раму"
" A4=Рабы"
" A5=не"
" A6=мы"
" A7=мы"
" A8=не"
" A9=рабы"
"A10=Буря"
"A11=мглою небо"
"A12=кроет"
"A13=Кот учёный",17,24"
Обрамляющие кавычки приделаны в выводе Echo
То есть, эта строка обработалась правильно
Подозреваю, первый вариант на кавычках сломается.
ИМХО, второй вариант сломается на ! и еще много на чём

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


Последний раз редактировалось megaloman, 01-09-2018 в 00:03.


Отправлено: 23:53, 31-08-2018 | #8


Ветеран


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

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


megaloman, ну, в любом случае надо смотреть на файл. Сам автор после размещения вопроса пока не появлялся .
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:14, 01-09-2018 | #9


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
А вдруг там что-нибудь этакое »
Ежели там, что-нибудь этакое и это действительный csv, то:
Цитата hAh0L13:
множество значений разделено : и | »
- False
Всё просто...
Но условие задачи ведь выставил ТС, поэтому такое предположение недопустимо.
Отсюда вывод: там не csv, однако.

Цитата megaloman:
Подозреваю, первый вариант на кавычках сломается.
ИМХО, второй вариант сломается на ! и еще много на чём »
имхо, здесь главное:
Цитата Iska:
Сам автор после размещения вопроса пока не появлялся »
А что там сломается и в каком случае - дело третье.

-------
scio me nihil scire. Ѫ


Отправлено: 08:11, 01-09-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - CMD/BAT Поиск по каталогам файлов bat и конвертирование их в JPEG freerider1989 Скриптовые языки администрирования Windows 1 18-04-2016 08:37
CMD/BAT - [решено] CMD/BAT - С помощью bat-ника найти и удалить текст в файле InVariable Скриптовые языки администрирования Windows 4 22-05-2015 20:06
bat и cmd pavsem7 Хочу все знать 3 29-01-2015 07:35
Разное - bat и cmd rocet Программирование и базы данных 8 14-03-2013 11:23
Проблема с cmd,и *bat Anime500 Лечение систем от вредоносных программ 7 23-09-2011 19:31




 
Переход