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

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

Ответить
Настройки темы
CMD/BAT - [решено] Скрипт для случайного выбора строки из файла

Старожил


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

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


Здравствуйте. Решил написать сюда, вдруг кто поможет, самому не получается решить эту проблему.
Суть такова: нужен скрипт, который из заранее созданного 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-сценарии, буду очень благодарен.

Отправлено: 05:15, 29-01-2010

 

Googler


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

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


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

Отправлено: 06:34, 29-01-2010 | #2



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

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


Старожил


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

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


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

Отправлено: 07:00, 29-01-2010 | #3


Googler


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

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


Цитата Anonymоus:
Попробовал запустить отдельно генератор рандомных чисел - каждый раз выдает одно и то же »
это генератор псевдослучайной последовательности чисел - для каждого батника эта последовательность "проигрывается" заново, в пределах одного батника числа отличаются
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:15, 29-01-2010 | #4


Старожил


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

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


Цитата amel27:
псевдослучайной последовательности »
Ясно, а можно что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа? Т.е. мне нужно при запуске батника выбрать случайную строку из файла, может быть существуют консольные утилиты, позволяющие генерировать случайное число в заданном диапазоне?

Отправлено: 07:21, 29-01-2010 | #5


Googler


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

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


Цитата Anonymоus:
что-нибудь придумать, чтобы при каждом запуске батника каждый раз генерировались разные числа? »
1. Подождать несколько секунд - стартовое число генерится на базе текущего времени;
2. Запускать батники из одной CMD-сессии/другого батника, а не создавать каждый раз новую.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:25, 29-01-2010 | #6


Старожил


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

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


Спасибо, разобрался, организовал цикл - N запусков генератора чисел внутри скрипта, где N основано на миллисекундах в текущем времени на момент запуска. Теперь все работает.

Отправлено: 07:39, 29-01-2010 | #7


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


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

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


For /F "Tokens=1,2 Delims=[]" %%i In ('Find /N "7777" "temp.txt"') Do Set $_%%i=%%j

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

Цитата:
echo %$_%%i%
выходит

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

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

Отправлено: 04:31, 13-06-2010 | #8


Googler


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

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


Цитата neogara:
echo %$_%%i% »
Код: Выделить весь код
set $_
Цитата neogara:
мне нужно работать с той строкой к которой пришла переменная $_3= »
Код: Выделить весь код
for /f "tokens=1* delims==" %%i in ('set $_') do (
echo var:%%i
echo val:%%j
)

Отправлено: 04:03, 14-06-2010 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипт для разбиения файла на части Diamond AutoIt 17 17-05-2013 01:42
[решено] Нужен скрипт для autoit для раскопирования файла irk72ag Автоматическая установка приложений 3 19-06-2009 15:27
Aplet для выбора файла запрещён, как разрешить? EvgeniyQQQ Microsoft Windows NT/2000/2003 1 13-10-2008 17:02
Скрипт для поиска файла Pavlov10 Программирование и базы данных 3 02-03-2006 11:51
Ищу Java скрипт простейшей бегущей строки Mixxx Вебмастеру 14 28-02-2003 03:22




 
Переход