![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Есть переменная $range, которая задает диапазоны чисел:
$range = " 1 - 100 = 1.txt 500 - 1000 = 2.txt 1200 - 1500 = 2.txt 6000 - 7000 = 3.txt 6500 - 8000 = 4.txt 12000 - 15000 = 5.txt " Далее в программе запускается цикл: for (1 .. 10000){ # Необходимо узнать, к какому диапазону принадлежит число, и записать его в соответствующий файл. # если число не принадлежит ни к одному из диапазонов, то сделать next; # если число принадлежит сразу к нескольким диапазонам, то записать в соответствующие файлы. # если есть диапазон (5.txt), числа из которого ни разу не встречались, то файл 5.txt. создавать не нужно. } Это сообщение отредактировал(а) Suppir - 9.1.2011, 19:58 |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Вот что у меня получилось. Диапазон определяется нормально, но не получается записать число в соответствующий файл :(
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -lne 'push @a,[ split "\\s+[-=]\\s+" ]; END { foreach (1..10000) { foreach $a (@a) { if ($_ >= $a->[0] && $_ <= $a->[1]) { print "echo $_ >> $a->[2]" } } } }' | sh
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Не совсем понятно, как записать числа в нужный файл.
Дело в том, что у меня не однострочник, и эта конструкция записи в файл не подойдет... А можно на примере моего кода - как записать результат в нужный файл? Это сообщение отредактировал(а) Suppir - 9.1.2011, 21:45 |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Все, получилось:
Если кто знает, как подсократить код и улучшить, буду благодарен! Это сообщение отредактировал(а) Suppir - 9.1.2011, 22:11 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -lne 'push @a,[ split "\\s+[-=]\\s+" ]; END { foreach (1..10000) { foreach $a (@a) { if ($_ >= $a->[0] && $_ <= $a->[1]) { print { unless (ref \$a->[2] eq "GLOB") { open $a->[2],">",$a->[2] }; $a->[2]} $_ } } } }'
|
|||
|
||||
| Suppir |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Спасибо. Нашел в своем коде ошибку:
вместо проверки:
нужно было писать:
Это сообщение отредактировал(а) Suppir - 11.1.2011, 12:57 |
||||
|
|||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
Тут мне не совсем понятно:
Сначала переменной $file присваивается имя файла и переменная используется как скаляр, а затем эта же переменная уже используется как дескриптор файла. Строка local $file = $3 не лишняя? |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
alezzz, так точно. $file используется и как строка, и как дескриптор файла. Вроде, работает.
Добавлено через 2 минуты и 47 секунд Если написатЬ: push @range, [$1, $2, $3]; open($3, ">$3"); то работать не будет. А если написать: push @range, [$1, $2, $3]; local $file = $3; open($file, ">$3"); то работает. Вообще, очень многие функции не работают с переменными вроде $1, $2, $& и т.п. Приходится присваивать их значение временным переменным. Это сообщение отредактировал(а) Suppir - 11.1.2011, 20:33 |
|||
|
||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
Да, действительно не лишняя
|
|||
|
||||
| alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
а если подсократить код, то осмелюсь предложить без функции:
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |