Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Регулярные выражения (http://forum.oszone.net/showthread.php?t=326007)

Kickpopal 16-04-2017 18:46 2729865

Регулярные выражения
 
Здравствуйте, нужно помощь с обработкой исключений.Задача такая: нужно чтобы пропускало строки такого вида: целое или десятичное число(может быть, как положительным, так и отрицательным), на всё остальное должно ругаться.

Т.е, строку такого вида должно пропускать: "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-ой и на последней позиции и должна быть в единственном виде.

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

Kickpopal 16-04-2017 19:01 2729870

Также забыл упомянуть про вариант с нулями.просто 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, то не пропускает, а если второй не ноль - то всё ок.
Но не уверен, что это хороший код.Лучше бы как-то в регулярку это занести.

Iska 16-04-2017 19:13 2729872

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

Iska 16-04-2017 19:31 2729878

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

Kickpopal 16-04-2017 19:37 2729879

Цитата:

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

ну с точкой и нулями - допустим, а вот 45-453 - уже не совсем допустимое.Мне нужно чтобы именно десятичные или целые числа принимало для дальнейшей обработки.Я так понимаю в CMD регулярку нормально никак не сделать?

Iska 16-04-2017 20:33 2729895

Цитата:

Цитата 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, чтобы без лишнего файла, но что-то не манится.

Kickpopal 16-04-2017 20:51 2729899

Цитата:

Цитата Iska
Я про это и интересовался — для какой обработки? »

А далее число переводится из 10 с.c в разные системы счисления.И чтобы всё работало как нужно и нужна обработка исключений.


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

Iska 16-04-2017 20:54 2729903

Цитата:

Цитата Kickpopal
А далее число переводится из 10 с.c в разные системы счисления. »

Может проще сразу на WSH/PoSH делать реализацию?

Kickpopal 16-04-2017 20:56 2729904

Цитата:

Цитата Iska
Может проще сразу на WSH/PoSH делать реализацию? »

Да, конечно, проще.Но нужно было именно здесь :)

Iska 16-04-2017 21:07 2729908

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

Kickpopal 16-04-2017 21:09 2729910

Цитата:

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

Да, спасибо.


Время: 10:56.

Время: 10:56.
© OSzone.net 2001-