Войти

Показать полную графическую версию : [решено] Скрипт для случайного выбора строки из файла


Anonymоus
29-01-2010, 05:15
Здравствуйте. Решил написать сюда, вдруг кто поможет, самому не получается решить эту проблему.
Суть такова: нужен скрипт, который из заранее созданного txt-файла извлечет значение каждой строки в переменную, причем переменные должны быть числовыми, и нарастать с шагом 1. То есть, у нас есть файл с содержанием
crossfire.bsp
lambda_core.bsp
the_beach.bsp
и нужно, чтобы переменная "1" содержала первую строку, "crossfire.bsp", а переменная "3" третью строку "the_beach.bsp".
Дальше нужно осуществить рандомную выборку строки по имени переменной, для этого я нашел кусок кода

call :RND 1 10 n

:RND
set MIN=%1
set MAX=%2
SET /A %3=%MIN%+(%MAX%-%MIN%+1)*%random%/32768

Теперь нужно решить, как определить суммарное количество строк и подставить его в качестве второго параметра при обращении к генератору случайных чисел.
Для чего всё это нужно - при запуске игрового сервера получить список всех установленных карт и случайно выбрать одну из них.
Если кто подскажет, как все это выполнить в bat-сценарии, буду очень благодарен.

amel27
29-01-2010, 06:34
Anonymоus, где-то так:
@Echo Off

For /F "Tokens=1,2 Delims=[]" %%i In ('Find /V /N "" "file.txt"') Do Set $_%%i=%%j
For /F "Tokens=*" %%i In ('^<"file.txt" Find /V /C ""') Do Set NUM=%%i

:LOOP
Set /A RND=1+%RANDOM%/(32768/%NUM%)
If %RND% GTR %NUM% Set /A RND-=1

Call Echo %%$_%RND%%%
PAUSE >Nul
GoTo :LOOP

Anonymоus
29-01-2010, 07:00
Спасибо, что откликнулся - но скрипт работает не совсем так, как нужно. Каждый раз выбирается одна и та же строка.
UPD: Попробовал запустить отдельно генератор рандомных чисел - каждый раз выдает одно и то же, значит проблема в нем.

amel27
29-01-2010, 07:15
Попробовал запустить отдельно генератор рандомных чисел - каждый раз выдает одно и то же »это генератор псевдослучайной последовательности чисел - для каждого батника эта последовательность "проигрывается" заново, в пределах одного батника числа отличаются

Anonymоus
29-01-2010, 07:21
псевдослучайной последовательности »
Ясно, а можно что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа? Т.е. мне нужно при запуске батника выбрать случайную строку из файла, может быть существуют консольные утилиты, позволяющие генерировать случайное число в заданном диапазоне?

amel27
29-01-2010, 07:25
что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа? »
1. Подождать несколько секунд - стартовое число генерится на базе текущего времени;
2. Запускать батники из одной CMD-сессии/другого батника, а не создавать каждый раз новую.

Anonymоus
29-01-2010, 07:39
Спасибо, разобрался, организовал цикл - N запусков генератора чисел внутри скрипта, где N основано на миллисекундах в текущем времени на момент запуска. Теперь все работает.

neogara
13-06-2010, 04:31
For /F "Tokens=1,2 Delims=[]" %%i In ('Find /N "7777" "temp.txt"') Do Set $_%%i=%%j

А как можно в дальнейшем применить переменную $_%%i чтоб работать с каждой строкой, а то если просто посмотреть результат переменной

echo %$_%%i%

выходит

%$_%%i%

мне нужно работать с той строкой к которой пришла переменная $_3=

а потом со строкой $_5=

amel27
14-06-2010, 04:03
echo %$_%%i% »
set $_
мне нужно работать с той строкой к которой пришла переменная $_3= »
for /f "tokens=1* delims==" %%i in ('set $_') do (
echo var:%%i
echo val:%%j
)




© OSzone.net 2001-2012