Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Регулярные выражения

Ответить
Настройки темы
CMD/BAT - Регулярные выражения

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Kickpopal
Дата: 16-04-2017
Описание: опечатка
Здравствуйте, нужно помощь с обработкой исключений.Задача такая: нужно чтобы пропускало строки такого вида: целое или десятичное число(может быть, как положительным, так и отрицательным), на всё остальное должно ругаться.

Т.е, строку такого вида должно пропускать: "45.4545" или "-45.3434" или просто "45", а вот например так: ".45" или "44-455" - уже нет.

Вот что я написал:
Код: Выделить весь код
for /f "delims=" %%A in ('echo.%number%^| findstr "[^0-9][.-]"') do set "nv=%%~A"
if not "%number%"=="%nv%" (goto :prog1) else (echo nekorrectnie dannie&goto vibor)
Но тут как видно, просто если есть "." или "-" - пропускается, а нужно, чтобы ещё от позицию зависило, т.е "-" должен быть только на первой позиции, если он на другой - то уже не должно пропускать, а точка, соответственно, не может быть на 1-ой и на последней позиции и должна быть в единственном виде.

Помогите довести до ума, спасибо.

Отправлено: 18:46, 16-04-2017

 

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Также забыл упомянуть про вариант с нулями.просто 0 - должно пропускать, а вот всякие 000051 либо должно преобразовать к виду 51 либо вообще не пропускать.Я выбрал второе(хотя 1, наверное, более рациональный вариант) и сделал как-то так:
Код: Выделить весь код
if "%number:~0,1%"=="0" (@if "%number:~1,1%"=="0" (echo "vvedite 4islo ne na4inauheecy c 0"&goto vibor) else (goto :npr1))
Т.е если первый 0, то идёт проверочка на второй 0, если ещё 2, то не пропускает, а если второй не ноль - то всё ок.
Но не уверен, что это хороший код.Лучше бы как-то в регулярку это занести.

Отправлено: 19:01, 16-04-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Kickpopal, sed.exe, WSH, PowerShell или mshta.exe. Для findstr.exe задача, боюсь, будет не по плечу.

Отправлено: 19:13, 16-04-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Kickpopal, а Вам зачем? В принципе, и .45, и 000051 — вполне допустимые числа.

Отправлено: 19:31, 16-04-2017 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Kickpopal, а Вам зачем? В принципе, и .45, и 000051 — вполне допустимые числа. »
ну с точкой и нулями - допустим, а вот 45-453 - уже не совсем допустимое.Мне нужно чтобы именно десятичные или целые числа принимало для дальнейшей обработки.Я так понимаю в CMD регулярку нормально никак не сделать?

Отправлено: 19:37, 16-04-2017 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Kickpopal:
для дальнейшей обработки. »
Я про это и интересовался — для какой обработки?

Самое простое — использовать внешний WSH файл-фильтр, наподобие:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strValue


With WScript.CreateObject("VBScript.RegExp")
	.Pattern = "^[-+]?[0-9]*\.?[0-9]+$"
	
	For Each strValue In Split(WScript.StdIn.ReadAll(), vbCrLf)
		strValue = Trim(strValue)
		
		If .Test(strValue) Then
			WScript.StdOut.WriteLine CStr(CDbl(strValue))
		End If
	Next
End With

WScript.Quit 0

Пример кода пакетного файла для фильтрации:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

(
	echo 45.4545
	echo -45.3434
	echo 45
	echo 0.45
	echo .45
	echo 44-455
	echo 0
	echo 000
	echo 000051
)| cscript.exe //nologo "0002.vbs"


endlocal
exit /b 0

Результат

P.S. Можно, конечно, посидеть и слепить в одну строку на JScript для mshta.exe, чтобы без лишнего файла, но что-то не манится.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:33, 16-04-2017 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Я про это и интересовался — для какой обработки? »
А далее число переводится из 10 с.c в разные системы счисления.И чтобы всё работало как нужно и нужна обработка исключений.


Спасибо большое, я понял.

Отправлено: 20:51, 16-04-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Kickpopal:
А далее число переводится из 10 с.c в разные системы счисления. »
Может проще сразу на WSH/PoSH делать реализацию?

Отправлено: 20:54, 16-04-2017 | #8


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Может проще сразу на WSH/PoSH делать реализацию? »
Да, конечно, проще.Но нужно было именно здесь

Отправлено: 20:56, 16-04-2017 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Как скажете. Текущая реализация Вас устроит?

Отправлено: 21:07, 16-04-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Регулярные выражения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
регулярные выражения Ginger Вебмастеру 60 21-03-2012 01:11
Прочее - grep регулярные выражения dogidogi Общий по Linux 8 28-05-2009 22:54
Разное - PHP - регулярные выражения: HELP GoldenOrb Программирование и базы данных 10 08-09-2008 16:47
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход