Найти ВСЕ 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
массив в начале программы...