конвертировать вводимые пользователем символы за символом с помощью пакета - PullRequest
2 голосов
/ 04 ноября 2011

Хорошо, в общем, я хочу, чтобы простая пакетная программа меняла символы X на символы Y таким образом, как это

a-b
b-c
c-d
d-e
e-f
etc etc etc

ive ищет строки и другие переменные трюки, но это не работает.Вот то, что я пробовал, и вы можете увидеть на «codeb», где я попробовал альтернативный метод

set /p code=[paste your code here]
set code=%codea:~1%
set /a %code:~2% %codeb%

, это был мой способ разбить все входные символы на отдельные переменные.

если ваше чувство .... скучно ниже, это точное преобразование для перевода

a='
b=v
c=x
d=s
e=w
f=d
g=f
h=g
i=u
j=h
k=j
l=k
m=n
n=b
o=i
p=o
q=\
r=e
s=a
t=r
u=y
v=c
w=q
x=z
y=t
z=/

по сути, я должен быть в состоянии "вставить" этот "v'rxg" в пакет и нажать клавишу ввода, и затем он отображает"партия"

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Я изменил код Андрея для более быстрой версии, которая использует переменные пакета вместо текстового файла FIND. Вот оно:

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (codechart.txt) do set %%a
:loop
set /P encoded=[paste your code here]
if "%encoded%" == "" goto :eof
set decoded=
call :decode
echo Result:
echo\%decoded%
goto loop

:decode
if "%encoded%" == "" goto :eof
set ec=%encoded:~0,1%
set encoded=%encoded:~1%
set dc=?
if defined %ec% set dc=!%ec%!
set decoded=%decoded%%dc%
goto decode

Однако моя версия не работает, когда закодированы специальные символы (недопустимые имена переменных).

РЕДАКТИРОВАТЬ Единственные отличия моего кода от кода Андрея заключаются в следующем:

  • setlocal EnableDelayedExpansion: эта команда должна использовать расширение !var!, кроме% var%, что позволяет использовать оба расширения в одной команде.
  • for /f "delims=" %%a in (codechart.txt) do set %%a: эта команда берет строки ваших преобразований и выполняет команду set с каждым из них, то есть set a=' set b=v и т. Д. Таким образом, преобразования сохраняются в пакетных переменных с именем оригинального персонажа и значение нового персонажа.
  • if defined %ec% set dc=!%ec%!: Эта строка преобразует символ в переменную ec путем прямой замены. Например, если ec равен «b»: if defined b set dc=!b!; Поскольку переменная b существует и содержит «v», тогда выполните set dc=v.
0 голосов
/ 04 ноября 2011

Хорошо, вот рабочий скрипт, с которым вы можете поиграть. Он использует вашу диаграмму в виде текстового файла (с именем codechart.txt в моих настройках):

@ECHO OFF
:loop
SET /P encoded=[paste your code here]
IF [%encoded%]==[] GOTO :EOF
SET decoded=
CALL :decode
ECHO Result:
ECHO(%decoded%
GOTO loop

:decode
IF [%encoded%]==[] GOTO :EOF
SET ec=%encoded:~0,1%
SET encoded=%encoded:~1%
SET dc=?
FOR /F "delims==" %%C IN ('FIND "=%ec%" ^<codechart.txt') DO SET dc=%%C
SET decoded=%decoded%%dc%
GOTO decode

Если вы введете непустую строку, она даст результат. Нажатие Ввод без фактического ввода чего-либо прервет пакет. Если символ не найден на диаграмме, он будет представлен как ? в выходных данных.

...