получение значений, хранящихся в текстовом файле, и превращение их в переменные - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть текстовый файл, который выглядит примерно так:

0_1 100 102 20 278 28 32 20 102 0_2 823 72 182 182 938 2739 182 162 0_3 3873 1728 

есть шаблон, 0_1, 0_2, 0_3, это продолжается до 0_10 и, возможно, выше (блоки по 9).Я хочу превратить каждое число в переменную.Я использую следующий код для этого (имя файла calc_.cmd):

for /F "tokens=%1-%2" %%a in (%4) do (
    set "tick_%3=%%a"
    set "val1_%3=%%b"
    set "val2_%3=%%c"
    set "val3_%3=%%d"
    set "val4_%3=%%e"
    set "val5_%3=%%f"
    set "val6_%3=%%g"
    set "val7_%3=%%h"
    set "val8_%3=%%i"
)

Выполнение так:

call calc_.cmd 1 9 1 %1
call calc_.cmd 10 18 2 %1
call calc_.cmd 19 27 3 %1
call calc_.cmd 28 36 4 %1

%1 - текстовый файл.Двигаясь дальше ..

echo %val8_1% возвращает: 102.но echo %val8_4% возвращает ECHO is on.

Я предполагаю, что это как-то связано с диапазоном, который не может превышать 26, однако %val8_3% возвращает его правильное значение.Мне было интересно, есть ли другой способ обойти это, или, возможно, я делаю это неправильно, я буду рад услышать!ура

1 Ответ

0 голосов
/ 03 декабря 2018

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

@echo off
setlocal EnableDelayedExpansion

rem %1 = Number of starting element in input list (tick_%3) of group %3
rem %2 = Number of ending element in input list (val8_%3) of group %3
rem %3 = Group
rem %4 = Input file

set /A "start=%1-1, end=%2-%1, n=0"
for /F "delims=" %%a in (%4) do (
   for %%b in (%%a) do (
      if !start! gtr 0 (
         set /A start-=1
      ) else if !n! leq %end% (
         if !n! equ 0 (
            set "tick_%3=%%b"
         ) else (
            set "val!n!_%3=%%b"
         )
         set /A n+=1
      )
   )
)

SET TICK
SET VAL

Пример вывода:

> calc_.bat 1 9 1 file.txt
tick_1=0_1
val1_1=100
val2_1=102
val3_1=20
val4_1=278
val5_1=28
val6_1=32
val7_1=20
val8_1=102

> calc_.bat 10 18 2 file.txt
tick_2=0_2
val1_2=823
val2_2=72
val3_2=182
val4_2=182
val5_2=938
val6_2=2739
val7_2=182
val8_2=162

Обратите внимание, что ваш вводданные избыточны.Если начальный и конечный элементы кратны 9 и всегда зависят от номера группы, то они не требуются, поскольку их можно рассчитать по номеру группы.Эта точка также позволяет использовать другой и более простой метод:

@echo off
setlocal EnableDelayedExpansion

rem %1 = Group
rem %2 = Input file

for /F "delims=" %%a in (%2) do set "input=%%a"

for /L %%i in (2,1,%1) do for /F "tokens=1-9*" %%a in ("!input!") do set "input=%%j"

for /F "tokens=1-9" %%a in ("%input%") do (
    set "tick_%1=%%a"
    set "val1_%1=%%b"
    set "val2_%1=%%c"
    set "val3_%1=%%d"
    set "val4_%1=%%e"
    set "val5_%1=%%f"
    set "val6_%1=%%g"
    set "val7_%1=%%h"
    set "val8_%1=%%i"
)

SET TICK
SET VAL

Пример вывода:

> calc_2.bat 1 file.txt
tick_1=0_1
val1_1=100
val2_1=102
val3_1=20
val4_1=278
val5_1=28
val6_1=32
val7_1=20
val8_1=102

> calc_2.bat 2 file.txt
tick_2=0_2
val1_2=823
val2_2=72
val3_2=182
val4_2=182
val5_2=938
val6_2=2739
val7_2=182
val8_2=162
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...