![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| xXvladXx |
|
||||||||
|
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
на входе файл
скрипт
по идеи должно вывести чтото типа
а выводит
Это сообщение отредактировал(а) xXvladXx - 1.4.2008, 11:58 |
||||||||
|
|||||||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
Уважаемый ваш скрипт выводит нечто совсем другое.
$new_text не определена. Что-то ваш скрипт делает совершенно противоположное. Вы лучше скажите, чего вы хотите. просто добавить в конце строчки ---? Это сообщение отредактировал(а) shamber - 1.4.2008, 12:12 |
|||
|
||||
| xXvladXx |
|
|||
|
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
нет
я хочу чтоб он в случайным порядке вывел $lines строчек Добавлено через 1 минуту и 33 секунды ой переписыл и ошибся foreach(&random_line('links.txt',5)){ print $_."----"; } |
|||
|
||||
| shamber |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
у меня выводит
чтобы выводил нужное число, просто добавьте
Это сообщение отредактировал(а) shamber - 1.4.2008, 12:46 |
||||
|
|||||
| xXvladXx |
|
||||
|
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
ВО! щас понял в чем глюк тока как исправить хз((
вот так выводит норм рандомно 5 строк
а вот так почемуто все...
$/=undef ; используется далее в проге цикл и получается так что при первом рандомизе все ок а дальше глючит((( |
||||
|
|||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
$/ - это разделитель записей при чтении файла. Вы ему делаете глобально undef. В результате операция my @array = (<FFF>); создает массив из одного элемента, в котором содержится мультистрока (весь файл), ... дальше понятно.
Как исправить. Добавьте в подпрограмму random_line перед открытием файла local $/ = "\n"; |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
-------------------- Died at Life.pl line 21 |
|||
|
||||
| xXvladXx |
|
|||
|
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
О! спс)
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
KSURi, не все так просто. Твой код, к сожалению, не исключает возврат одной и той же строки несколько раз.
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
sub random_line ($$) {
my ($file,$num) = @_; open F,$file or return; my @a = sort { int (rand (3))-1 } map { $_ = <F>; $_ } 0..$num; close F; chomp @a; return @a; } |
|||
|
||||
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
arto, остроумно! Но выборка будет только из первых элементов массива. Поправить можно так:
В случае кода KSURi:
Но первоначальный алгоритм, приведенный xXvladXx, все же, кажется, более экономный. И у него отличие: строки идут в том порядке, в котором они были в исходном файле. |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый arto, не подскажите, а сортировка со случайной функцией не может длиться бесконечно долго?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. map { $_ = <F>; $_ } 0..$num читает из F $num первых строк.
2. нет. Добавлено через 1 минуту и 58 секунд как я понял, задача заключается "в случайным порядке вывел $lines строчек" |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
arto, если "2. нет." относится к моему вопросу, то на чем основана Ваша уверенность?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
arto, фраза топикстартера "я хочу чтоб он в случайным порядке вывел $lines строчек" действительно допускает двоякое толкование, но судя по коду, результатом работы которого он был доволен, требовалось все же извлечь из всего файла случайные строки в количестве $lines.
ginnie, код arto с сортировкой по случайной функции работает не бесконечно долго (проверено). |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |