Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 8
1

Очистка вводимых пользователем данных от специальных символов

17.12.2016, 23:15. Показов 938. Ответов 5

Author24 — интернет-сервис помощи студентам
Коллеги!
Есть задача выполнить фильтрацию вводимых данных от спецсимволов, таких как ! @ # $ % ^ & ( ) _ - = + { } [ ] ' ; ` ~ * ? и проч., с последующей работой с отчищенными от спецсимволов данными.
Пытаюсь делать это примерно так:
Windows Batch file
1
2
3
4
5
set /p var=type value 
set "var=%var:"=%"
set "var=%var:|=%"
set "var=%var:(=%"
set "var=%var:@=%"
ну и так далее.
Только это срабатывает не со всеми спецсимволами, в частности % ^ * & = и другими.
Пробовал экранировать спецсимволы как указано здесь:
Экранирование восклицательного знака
Восклицательные знаки и знаки процента в именах файлов
Тонкости языка, редкие команды и сложные скрипты
,
но и это не помогает. Подскажите где можно найти материалы для решения данной задачи или дайте направление.
Подозреваю, что можно как-то реализовать это через оператор FOR /F, но могу придумать как это сделать правильно и оптимально.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2016, 23:15
Ответы с готовыми решениями:

Из символов вводимых пользователем с клавиатуры, составить слово. Подсчитать количество символов в слове, стоящих на четных местах.
Из символов вводимых пользователем с клавиатуры, составить слово. Подсчитать количество символов в...

Можно ли ограничить число вводимых символов в edit1 пользователем?
Можно ли ограничить число вводимых символов в edit1 пользователем, к примеру до 6?

Поиск слов в базе данных с использованием специальных символов
Уважаемые программисты, добрый день! Помогите пожалуйста решить задачу по поиску слов в базе данных...

Проверка данных вводимых пользователем
Добрый день, существует такой код: Sub Ввод() Worksheets("таблица").Select 'выбор листа...

5
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
18.12.2016, 01:07 2
Пример
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
for /f "delims=" %%a in ('echo set^=cmd') do set vk="%%a"& call :p1 %%vk%%
for /f "delims=" %%a in ('echo set^=cmd') do set vk=%%a& call :p1 "%%vk%%"
for /f "delims=" %%a in ('echo set=cmd') do set vk=%%a& call :p1 "%%vk:set =set=%%"
for %%a in (^< ^> ^| ^( ^) ^& ^@ ^^) do set sl=^^^%%a& call :p1 ^^%%sl%%
setlocal enabledelayedexpansion
for %%a in (^^^!) do set sl=^^^%%a& call :p2 ^^%%sl%%
pause
:p1
 echo %~1
exit/b
:p2
 echo ^%~1
exit/b

Заменить = на . в значении переменной %s%
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "s=<a=bx><c=dy>"
setlocal enabledelayedexpansion
:# 
 for %%a in ("!s:~%n%,1!") do if not "%%~a"=="" set/a n+=1& (if "%%~a"=="=" (<nul set/p=.>>"file.txt") else (<nul set/p=%%~a>>"file.txt"))& goto #
 echo:>>"file.txt"
endlocal
pause
1
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 8
19.12.2016, 19:21  [ТС] 3
alpap, скажите, проверка в маршруте или наименовании файла знака ! выполняется аналогичным способом?

Добавлено через 1 минуту
или можно просто заключить их в двойные кавычки
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
19.12.2016, 19:38 4
enquire,
со знаком ! свои капризы так как на него влияет команда setlocal enabledelayedexpansion и без нее нельзя и чтобы примирить надо экранировать, но правильно, а уж где он (знак !) будет встречаться не так важно, вернее что и как выводить, вот еще пример:
Экран воскл знак
Windows Batch file
1
2
3
4
5
6
7
@echo on
setlocal enabledelayedexpansion
set "vzk=^!"
echo !vzk!
set vz=^^^!
echo !vz!
pause>nul
вар1
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
for /f "delims=" %%a in ('type "file.txt"') do set "s=%%a"& call :p "%%s:!=^!%%"
pause& exit
 
:p
 setlocal enabledelayedexpansion
 echo %~1
exit/b
вар2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
<"file.txt" (
 for /f "delims=" %%a in ('more') do (
  set "s=%%a"
  setlocal enabledelayedexpansion
  set "s=!s:^!=^^!!"
  echo !s!
 )
)
pause
Добавлено через 1 минуту
как видите и в кавычках необходим экран.
1
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 8
19.12.2016, 19:55  [ТС] 5
Т. е., если я правильно понял, при разборе маршрута к файлу или самого наименования файла с символом ! вне блока setlocal EnableDelayedExpansion, подобные манипуляции с экранированием не требуется?

Добавлено через 7 минут
alpap, и ещё вопрос напрямую не относящейся к этой теме.

Не по теме:

Подскажите как работает команда %~$ПУТЬ:I ? Не могу понять принцип, механизм поиска и подстановки. (Ведь, если не ошибаюсь, вместо "ПУТЬ" можно использовать любую другую переменную.

0
724 / 323 / 133
Регистрация: 17.03.2014
Сообщений: 811
19.12.2016, 22:13 6
Цитата Сообщение от enquire
...вместо "ПУТЬ" можно использовать любую другую переменную.
верно:

Не по теме:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
::    %~$ПУТЬ:I   - проводится поиск по каталогам, заданным в
::                  переменной среды ПУТЬ, и переменная %I
::                  заменяется на полное имя первого найденного
::                  файла.
::                  Если переменная ПУТЬ не определена или
::                  в результате поиска не найден ни один файл,
::                  то этот модификатор заменяется на пустую
::                  строку.
:: в примере ПУТЬ == path
for %%v in ("wmic.exe") do echo:wmic.exe found here:%%~$path:v
pause

1
19.12.2016, 22:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2016, 22:13
Помогаю со студенческими работами здесь

Контроль вводимых пользователем данных
Здравствуйте, в книге Зиборова есть урок по контролю вводимых данных в текстовое поле. Код выглядит...

Проверка вводимых пользователем данных
Здравствуйте господа! Помогите новичку! Такая сложность. Нужно проверять что вводит пользователь в...

Сравнение типов данных вводимых пользователем
Здравствуйте, пытался гуглить, но ничего не нашел. Проблема: К примеру пользователь в программе...

Проверка вводимых пользователем данных в DataGridView
Необходимо сделать, чтобы пользователь в DataGridView мог вводить только числа и в одну ячейку не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru