Выбор случайной строки из файла

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Push0k
Сообщения: 6
Зарегистрирован: 24 янв 2007, 23:39

Вопрос к профи в ПХП
Я уже всю голову разбил, я начинающий - может что-то не догоняю,но я не пойму как это сделать.
Мне нужно из файла выбрать случайную строку и записать ее в отдельную переменную для дальнейшей обработки.
Файл:
word1=slovo1
word2=slovo2
word3=slovo3
...
Кусок затруднительного кода:
<?
...
$file = fopen("file.txt", "r");
$line= //со случойно выбранной строкой из файла
fclose ($file);
$list=list($word, $slovo) = split("=", $line);
...
?>
Что можно сделать с этим кодом?
Может как-то изменить файл, добавить какие-нибудь якоря.

ЗЫ. пробовал через fgets() - он читает только первую строку, а надо чтоб читал весь текст и выдавал случайную строку.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

int rand(int max, int min);
Собственно это функция рандом можно поступить что-то типа того

$file = fopen("file.txt", "r");
$FCount = count($file);
rand($FCount, 0) оно тебе сгенерирует случайное число в пределах длинны файла..
Далее думаю справишся..
isms.ru
Сообщения: 48
Зарегистрирован: 11 янв 2007, 16:45

Ну или закачать файл в массив и рандомом взять нужный индекс-строку
Или юзать БД вместо файла и рандомом взять нужное
или юзать структурированный файл и тогда сииком установить на нужную рандомную запись и считать.
Push0k
Сообщения: 6
Зарегистрирован: 24 янв 2007, 23:39

У меня из файла не получается, получилось через массив
<?
...
$q=array("word1=slovo1",word2=slovo2,...);/* Тобишь одномерный массив без индексов, а в значении сочетание - потом это сочетание разбивал черезз split()*/
if (!isset($line))
{
$line = rand(1,count($q)) - 1; // Выбираем элемент массива случайно;
}
$str = $qw[$line];// $str - то случайная строка/сочетание"wordX=slovoX" из массива $qw;
$list=list($qwest, $word) = split("=", $str);
...
?>


Но хотелось бы брать из файла.

Вот так я уже испробывал,

[quote="Duncon"]
$file = fopen("file.txt", "r");
$FCount = count($file);
rand($FCount, 0)


но тогда какая-то бяка вот тут выступает,

$list=list($qwest, $word) = split("=", $str);

и дальше через переменные $qwest, $word что то не то выходит.

ЗЫ: Может кто знает, как можно обновлять страницы чтоб была при этом была и генерация другой строки?
Пробовал $PHP_SELF, но она страницу обновляет, а при этом новую строку не генерирует.
И получается страница обновилась (все данные стерлись, а $word (и $slovo) не изменились.
Может я не умею ее готовить?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

$list=list($qwest, $word) = split("=", $str);
Такая постоновка условия не может работать..

Не имей привычки выкладывать кусочек кода он не дает представление ни о чем..

ps А может стоит вначале учебничек почитать??? Ошибок синтаксиса не будет.. благо их много сей час развелось..
Push0k
Сообщения: 6
Зарегистрирован: 24 янв 2007, 23:39

[quote="Duncon"]
$list=list($qwest, $word) = split("=", $str);
Такая постоновка условия не может работать..


Извини Я немного перепутал при копировании :( Правильно:
$list=list($word, $slovo) = split("=", $str);
А дальше уже идет работа с переменными $word и $slovo не затрагивая вышеуказанные переменные.
Но почему такая постановка условия не может работать ?

PS. [quote="Duncon"]
ps А может стоит вначале учебничек почитать??? Ошибок синтаксиса не будет.. благо их много сей час развелось..


Я не понял. Если не трудно по подробней. Я что то не так делаю? Тогда можно ссылочку на учебник где это описано(я лично не нашол - несколько перерыл) или объяснить по конкретней.
Как сделать чтоб страница обновлялась полностью?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

$list = list($word, $slovo) = split("=", $str);
Перевожу:
Переменная $list приравнивается нескольким значениям каждое из которых в свою очередь приравниваються порезанным значениям из строки $str.
Собственно на мой взгляд это и есть ошибка синтаксиса двойное приравнивание..
list($word, $slovo) = split("=", $str);
Далее если тебе нужно загнать все это в массив
$list ['word'] = $word;
$list ['slovo'] = $slovo;
или
$list [] = $word;
$list [] = $word;
зависит от потребностей, есть еще или или или (читай про массивы в учебниках)

ну и если операция циклическая не забудь после каждого круга очищать массив, иначе к нему каждый раз будут пребавляться еще по 2 значения
unset($list);

Как сделать чтоб страница обновлялась полностью?
Зависит от поставленной задачи я ее не знаю ибо кто-то жмет полный кусок кода при этом не объясняя что нужно..

ps Основы синтаксиса есть в каждом учебнике..
Push0k
Сообщения: 6
Зарегистрирован: 24 янв 2007, 23:39

$list = list() = split("=", $str);
Ну не знаю, у меня строка работает и свободно выдает $word и $slovo на дальнейшую обработку.
А случайный выбор строк из файла не получается - я сделал из массива - все поканало.
ЗЫ А страницы обновляю через
<?
if (empty($_GET['refr']) and $_GET['refr']==0)
{
...весь скрипт...
}
elseif (!empty($_GET['refr']) and $_GET['refr']==0)
print '
<a href="file.php?refr=0">Ссылка на скрипт</a>';
?>

Первая строка нареканий не вызывает все работает отлично, но последняя не работает (она должна при открытии скрипта ввыводить ссылку на него и при нажатии на ссылку переходить к выполнению скрипта)
Если я понятно выражаюсь, объясните, пожалуйста, правилен ли синтаксис и вобще возможно ли такое построение?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Ну спорить не буду не проверял, может такая конструкция и работает неким чудесным способом..

ЗЫ А страницы обновляю через

Это всеголишь проверка переменной,
Читаю:
Если пустая переменная refr и она докучи равна нулю..
Будет ли такая форма работать??


if empty($_GET['refr']) {
die('
<a href="file.php?refr=0">Ссылка на скрипт</a>');
} else {
...............
}
Условие данное может плавать в зависимости от твоих задач, я написал для 2 условий переменная отсутствует ли присутствует чему равна не важно..
Push0k
Сообщения: 6
Зарегистрирован: 24 янв 2007, 23:39

if empty($_GET['refr']) {
die('
<a href="file.php?refr=0">Ссылка на скрипт</a>');
} else {
...............
}


Спасибо. Попробую так. Потом отпишу.
Ответить