Преобразование десятичной дроби от 100 до 31 30 30 в пакетном режиме - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь преобразовать число из текстового файла - скажем, number.txt - из десятичного числа 100 в ASCII 31 30 30.

Можно ли что-то сделать в пакете?

Я попробовал несколько вещей, которые уже нашел в SO, но у меня никогда не было правильного вывода.

Позже, после того, как я преобразовал это - мне нужно добавить одно число после некоторого выполнения. Итак, скажем, после 109/31 30 39 - например, должно быть 110 31 31 30, а не 31 30 3a.

Можете ли вы дать мне подсказку?

setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (nummer.txt) do (
    set line=%%a
    set a=!line:~0,1!
    set line=%%a
    set b=!line:~1,1!
    set line=%%a
    set c=!line:~2,1!
    set /a mitte=3!a!3!b!3!c!
    echo 0F0900000A00143030303030303030303030303030303030!mitte!00>com3

1 Ответ

0 голосов
/ 27 апреля 2020

Пожалуйста, посмотрите, поможет ли вам следующий пример Rem arked .

@Echo Off
SetLocal EnableDelayedExpansion
Rem Undefine any existing variable named inputNum.
Set "inputNum="
Rem Read input number from first line of input file.
Set /P "inputNum="<"nummer.txt"
Rem Exit script if inputNum was not defined.
If Not Defined inputNum GoTo :EOF
Rem Define a number of additional iterations [number results required - 1].
Set "#=9"
Rem Define an increment size.
Set "i=5"

Rem Define a variable for total increase, [# x i].
Set /A $=#*i
Rem Undefine an existing verable named arg.
Set "arg="
Rem Begin looping for stated iterations.
For /L %%G In (0,%i%,%$%)Do (
    Set /A arg=inputNum+%%G
    Rem Call subfunction passing the input number as an argument.
    Call :Sub "!arg!"
    Rem If successful,
    If Defined mitte (
        Rem Output resultant number sequence.
        Echo !mitte!
    ) Else (
        Rem Exit if no result sequence.
        GoTo EndIt
    )
)

:EndIt
Rem Allow time to read output before ending.
Pause
EndLocal
GoTo :EOF

:Sub
Rem Undefine any existing variable named mitte.
Set "mitte="
Rem Split each character of passed argument.
For /F Delims^=^ EOL^= %%G In ('"Cmd /U/C Echo(%~1|Find /V """')Do (
    Rem prefix each digit of inputNum with 3.
    If Not Defined mitte (Set "mitte=3%%G")Else Set "mitte=!mitte!3%%G")
Rem return to next command line after previous Call
Exit /B

Для тестирования вам нужно только убедиться, что путь к вашему входному файлу правильно, (строка 6) . Я дополнительно включил средство для вывода определенного c числа дополнительных итераций (строка 10) с фиксированным приращением (строка 12) . Пожалуйста, настройте их по мере необходимости.

Что делать, если nummer.txt содержит только 401, с 9 дополнительными итерациями, увеличивающимися на 5, должно получиться:

343031
343036
343131
343136
343231
343236
343331
343336
343431
343436

После тестирования вы, вероятно, захотите заменить Echo !mitte! на (Echo 0F0900000A00143030303030303030303030303030303030!mitte!00)>COM3, (строка 26)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...