Массив петель в партии - PullRequest
       1

Массив петель в партии

0 голосов
/ 06 февраля 2019

У меня был кусок кода для выполнения цикла из массива, но в итоге goto оказалось неожиданным.Что здесь не так?

@echo off 
set len = 3 
set obj[0].Name = Joe 
set obj[0].ID = 1 
set obj[1].Name = Mark 
set obj[1].ID = 2 
set obj[2].Name = Mohan 
set obj[2].ID = 3 
set i = 0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name = %cur.Name% 
echo Value = %cur.ID% 
set /a i = %i%+1 
goto loop

После удаления этих пробелов, как показано ниже:

@echo off 
set len=3 
set obj[0].Name=Joe 
set obj[0].ID=1 
set obj[1].Name=Mark 
set obj[1].ID=2 
set obj[2].Name=Mohan 
set obj[2].ID=3 
set i=0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name=
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name=%cur.Name% 
echo Value=%cur.ID% 
set /a i=%i%+1 
goto loop

Я получил эти результаты

  • Имя =
  • Значение =
  • Имя =
  • Значение =
  • Имя =
  • Значение =

???

После использования obj [% i%], следующий код:

@echo off 
set len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set i=0
:loop 

if %i% equ %len% goto :eof 
set cur.Name=%obj[%i%].Name%
set cur.ID=%obj[%i%].ID%

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name=%cur.Name% 
echo Value=%cur.ID% 
set /a i=%i%+1 
goto loop

Получены следующие результаты

  • Имя = i
  • Значение = i
  • Имя = i
  • Значение = i
  • Имя = i
  • Значение = i

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Лично я бы предложил следующий гораздо более простой код:

@echo off 
setlocal EnableDelayedExpansion

set "obj[0].Name=Joe"
set "obj[0].ID=1"
set "obj[1].Name=Mark"
set "obj[1].ID=2"
set "obj[2].Name=Mohan"
set "obj[2].ID=3"

:loop
for /L %%A IN (0 1 2) do (
    for /F "delims=. tokens=2" %%B in ('set obj[%%A] ^| sort /R') do (
        set "output=%%B"
        echo !output:ID=Value!
    )
)

Так что результат будет:

Name=Joe
Value=1
Name=Mark
Value=2
Name=Mohan
Value=3
0 голосов
/ 06 февраля 2019

Я удалил пробелы вокруг знака равенства "set":

@echo off 
set /a len=3 

set obj[0].Name=Joe 
set obj[0].ID=1 
set obj[1].Name=Mark 
set obj[1].ID=2 
set obj[2].Name=Mohan 
set obj[2].ID=3 

set /a i=0 

:loop 
    if "%i%" equ "%len%" goto :eof 
    set cur.Name=
    set cur.ID=

    for /f "usebackq delims==. tokens=1-3" %%j in (`set obj[%i%]`) do ( 
       set cur.%%k=%%l 
    ) 
    echo Name=%cur.Name% 
    echo Value=%cur.ID% 
    set /a i=%i%+1 
goto loop
:eof

И вывод выглядит так:

Name=Joe
Value=1
Name=Mark
Value=2
Name=Mohan
Value=3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...