Компьютерный форум 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=260316)

subuday77 11-05-2013 03:32 2147885

Последовательность чисел в строке
 
Добрый день. Возникло затруднение: необходимо сгенерировать некую случайную последовательность из цифр от 0 до 9, причём так, чтобы кол-во цифр задавалось пользователем. В столбик я сумел это сделать. А как в строчку? Вот мой код:

@echo off
set t=0
echo:Set key length
set /p l=
cls
:1
set /A t=t+1
Set /A q=(%RANDOM%%%9)
echo:%q%
if %t% neq %l% goto 1
pause

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

@echo off
mode con: cols=38 lines=20 & color 1F
:2
cls
set t=0
echo:Set key length
set /p l=
cls
echo:
echo: KEYMASTER
echo:
echo: ====================================
:1
set /A t=t+1
Set /A q=(%RANDOM%%%9)
echo: %q%
if %t% neq %l% goto 1
echo: ====================================
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 2
if %a%==y goto 2
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause

Foreigner 11-05-2013 07:06 2147895

Код:

@echo off
setlocal

set /p n="Enter length of string: "

for /l %%i in (1,1,%n%) do call:1
echo.  bye..
goto:eof

:1
0>nul set /p="%random:~1,1%"


subuday77 11-05-2013 13:38 2148021

Прошу прощения, но это не то... Представленная программа выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. А мне бы хотелось получить все значения в ОДНУ строку. Как-то так: 2 4 8 9 6 3, на пример.

Foreigner 11-05-2013 14:17 2148049

Цитата:

Цитата subuday77
выдаёт значения одно за другим, но каждый раз в НОВОЙ строке. »

1.cmd:
Код:

  > 1                   
Enter length of string: 2
62  bye..               
                         
  > 1                   
Enter length of string: 3
668  bye..               
                         
  > 1                   
Enter length of string: 4
8525  bye..             
                         
  > 1                   
Enter length of string: 5
58646  bye..             
                         
  >

ЧЯДНТ?

kiripanda 11-05-2013 15:39 2148077

м.б. нужны пробелы между цифрами?
Код:

0>nul set /p="%random:~1,1% "
Код:

Enter length of string: 3
1 5 4  bye..


subuday77 11-05-2013 16:05 2148094

Огромное спасибо всем!
Решил сам, вот так:
Код:

@echo off
mode con: cols=38 lines=20 & color 2F
:1
cls
echo:Enter key length
set /p I=
set N=10
set CHAR=0 1 2 3 4 5 6 7 8 9
:LOOP
set /a R=1+%N%*%random%/32768
for /f "tokens=%R%" %%q in ("%CHAR%") do (set T=%%q%T%)
Set /a I-=1
If %I% GTR 0 goto LOOP
cls
echo:
echo:
echo:            KEYMASTER-2
ECHO: ************************************
echo:
echo:                %T%
echo:
echo: ************************************
set T=
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 1
if %a%==y goto 1
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause

Работает. Теперь другой вопрос. С помощью какой команды можно установить ограничение на переменную %I% таким образом, чтобы ввести можно было только цифры? Я мыслю, что-то типа "IF %I% NOT ERRORLEVL ??????? GOTO куда-нибудь". Но как точно, не могу придумать.

А с пробелами между цифрами, в предыдущем сообщени я не понял... Как их сделать? И возможно ли разделить пробелами цифры в моём коде?

Зарание благодарен всем!

Foreigner 11-05-2013 16:52 2148126

Код:

@echo off
setlocal

:0
set "n=0"
set /p n="Enter length of string: "

if %n% equ 0 set "n=null"
echo.%n%| 1>nul findstr "[^0-9]" && echo %n%: WRONG input value && goto:0

for /l %%i in (1,1,%n%) do call:1
echo bye..
goto:eof

:1
0>nul set /p="%random:~1,1% "


kiripanda 11-05-2013 16:55 2148127

> возможно ли разделить пробелами цифры в моём коде?
конечно. вставь пробел, а не приклеивай вплотную.

[offtop]
%random:~1,1% сеет не очень равномерно:
0, 1 и 2 довольно стабильно получается заметно больше 3-:-9
Кроме того есть вероятность сгенерировать пустоту
Лучше использовать %random:~-1%
Код:

@echo off &setlocal

set /a n=100000

call:0
echo call:1
for /l %%i in (%n%,-1,1) do (title %%i &call:1)
set from.%n%.
call:0
echo call:2
for /l %%i in (%n%,-1,1) do (title %%i &call:2)
set from.%n%.
goto:eof

:0
for %%d in (0 1 2 3 4 5 6 7 8 9) do set /a from.%n%.%%d=0
goto:eof

:1
set /a x=%random:~1,1%
call set /a from.%n%.%x% = %%from.%n%.%x%%% +1
goto:eof

:2
set /a x=%random:~-1%
call set /a from.%n%.%x% = %%from.%n%.%x%%% +1
goto:eof

выдача
Код:


call:1
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
Отсутствующий операнд.
from.100000.0=12237
from.100000.1=12361
from.100000.2=11489
from.100000.3=9112
from.100000.4=9223
from.100000.5=9086
from.100000.6=9221
from.100000.7=9205
from.100000.8=9054
from.100000.9=9012
call:2
from.100000.0=9960
from.100000.1=10072
from.100000.2=9959
from.100000.3=9946
from.100000.4=9804
from.100000.5=10221
from.100000.6=10078
from.100000.7=9990
from.100000.8=10106
from.100000.9=9864

[/offtop]

Foreigner 11-05-2013 17:01 2148138

Цитата:

Цитата kiripanda
Лучше использовать %random:~-1% »

попробуй %random:~0,1% получишь последовательности вида:
Цитата:

22111
11333
12221
А в консоли FAR'a вообще прикол:
Цитата:

> echo %random%
6063

> echo %random%
6070

> echo %random%
6073

> echo %random%
6076

> echo %random%
6079

> echo %random%
6083

> echo %random%
6083

>

Iska 11-05-2013 18:02 2148185

В консоли Far Manager'а
читать дальше »
вообще должно быть ;):
Код:

E:\Песочница\0248>echo %random%
%random%

E:\Песочница\0248>echo %random%
%random%

E:\Песочница\0248>echo %random%
%random%

если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54).

Foreigner 11-05-2013 18:38 2148205


Цитата:

Цитата Iska
если только Вы не отключили внутреннюю обработку команды echo самим Far Manager'ом (TechInfo #54). »

Да, нет ничего не отключал
Код:

  > reg query hkcu\software\far2\system\executor               
Ошибка: Не удается найти указанный раздел или параметр в реестре.


subuday77 11-05-2013 19:03 2148216

Спасибо большое всем!
Я всё сумел написать. Не совсем, как здесь предлагалось, но всё работает. Вот готовый код:

Код:

@echo off
title KEYMASTER-2
mode con: cols=38 lines=20 & color 2F
:1
cls
echo:Enter key length
set /p I=
set /a x=%I%
if %I%==0 echo:Free pass & goto 3
if %x%==0 goto 1
if %I% lss 0 goto 1
set N=10
set CHAR=0 1 2 3 4 5 6 7 8 9
:LOOP
set /a R=1+%N%*%random%/32768
for /f "tokens=%R%" %%q in ("%CHAR%") do (set T=%%q%T%)
Set /a I-=1
If %I% GTR 0 goto LOOP
If %I% lss 0 goto 1
cls
echo:
echo:
echo:            KEYMASTER-2
ECHO: ************************************
echo:
echo:                %T%
echo:
echo: ************************************
set T=
pause
:3
echo:One more key? (Y/N)
set /p a=
if %a%==Y goto 1
if %a%==y goto 1
if %a%==N goto 4
if %a%==n goto 4
cls & echo:Yes or No, please & goto 3
:4
cls
echo:Good bye!
pause

Ещё раз спасибо!

Iska 11-05-2013 20:25 2148233

Цитата:

Цитата Foreigner
Да, нет ничего не отключал »

Странно. Тогда не знаю ;).


Время: 19:52.

Время: 19:52.
© OSzone.net 2001-