Найти ВСЕ Ocurences of Letter изменить на Diffrent Letter

Я работаю над методом шифрования, который заменяет все буквы на строку чисел, которым следует пример:

set a=a
set b=b
set c=c
set aa=543241254
set bb=785214185
set cc=842501445

Моя проблема заключается в том, как я могу отсканировать введенный пользователем файл и заменить все буквы на цифры. (Файл изменяемого текста похож на "hihowareyou"Без пробелов и заглавных букв) Я попытался найти" а "в указанном файле и заменить его числами, но мой раздел не работал.

(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%b%=%bb%!"
    echo(!line!
    endlocal
))>"%newfile%"
type "%newfile%" >>%newfile%

Я не уверен, что нужно сделать, чтобы найти букву в текстовом файле и заменить ее на% a%,% b%,% c% и т. Д.

1 ответ

Решение

Вы должны сначала понять, что эти команды:

set a=a
set b=b
set c=c

... бесполезны "по определению" (то есть без дальнейшего объяснения), хотя должно быть очевидно, что в этом случае написание %a% всегда будет таким же, как писать просто a (то же самое происходит с остальными буквами).

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

set a=543241254
set b=785214185
set c=842501445

Затем, чтобы изменить букву "а " на содержимое переменной, вы можете сделать что-то подобное внутри вашего for команда:

set "line=!line:a=%a%!"

Опять же: это изменить a письмо по содержанию a переменная.


Теперь вы должны понимать, что вам нужно выполнить предыдущую замену не на одном a буква / переменная, но в ряде переменных каждая из них представлена ​​одной буквой. Стандартный способ обработки ряда переменных одним и тем же способом (что в действительности означает "использование одного и того же кода") - это использование for команда, которая изменяет значение индекса в сочетании с массивом. Например, если мы выберем "букву" для имени массива и определим требуемые значения замены в различных элементах массива, мы обязательно сделаем что-то вроде этого:

set letter[a]=543241254
set letter[b]=785214185
set letter[c]=842501445

После этого нам просто нужно знать, как можно манипулировать этими переменными / значениями. Полная информация по этому вопросу приведена в Массивах, связанных списках и других структурах данных в сценарии cmd.exe (пакетной), поэтому я не буду повторять их здесь снова. Однако управление массивом, необходимое для решения этой проблемы, проще, чем полное объяснение, приведенное по этой ссылке.

Если вы выполните эту команду: set letterбудут показаны все переменные, начинающиеся с буквы, включая их значения; например:

letter[a]=543241254
letter[b]=785214185
letter[c]=842501445

Если мы используем for /F "tokens=2,3 delims=[]=" %%a in ('set letter') do ... команда, то %%a Заменяемый параметр будет содержать каждый из индексов массива, то есть буквы a, b, cи т. д., и %%b Параметр будет содержать соответствующие числовые значения.

Таким образом, чтобы завершить вашу программу и заменить все определенные буквы, вам просто нужно поместить свой set "line=!line:%b%=%bb%!" строка внутри предыдущего for команда и правильно изменить %b% часть, которая представляет письмо, по %%a; и заменить %bb% часть, которая представляет числовое значение, по %%b:

for /F "tokens=2,3 delims=[]=" %%a in ('set letter') do (
   set "line=!line:%%a=%%b!"
)

Конечно, вы также должны определить letter массив в начале программы...

Другие вопросы по тегам