The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"помогите реализовать на perl следующие:"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"помогите реализовать на perl следующие:"  +/
Сообщение от gloomy_pilgrim (ok) on 25-Сен-09, 19:07 
Есть необходимость открывать и лочить несколько файлов в определенной директории для их обработки.
my @file_list = `ls $file_tmp`;
...
тут выбираются только файлы удовлетворяющие определенному условию,
тут все нормально и работает, поэтому пропустил.
...

Далее открываем нужные нам файлы
# open and lock selected files
for(my $i=0; $i<scalar(@file_list); $i++)
{
        open("FILE_$i","<$file_tmp/$file_list[$i]") or die "Can't open $file_tmp/$file_list[$i]: $!";
        flock("FILE_$i",1);
...
}
Вобщем получаем несколько дескрипторов файлов с именам FILE_0, и тд.
И их количество не фиксировано и завист от количестфа файлов.

Далее нужно поочередно считывать часть содержимого файлов в массив.

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

Например:
for(my $i=0; $i<scalar(@file_list); $i++)
{
@table = <"FILE_".$i> - естественно это не работает!!!
}

Сорри, в перле новичок, пните в нужную сторону.


Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "помогите реализовать на perl следующие:"  +/
Сообщение от Андрей (??) on 25-Сен-09, 19:13 
1. можно попробовать не открывать все необходимые файлы сразу, а обрабатывать по одному.
открыл, прочитал, закрыл, следующий - как у врача :-)
2. если хочеться держать открытыми все файлы, то дескрипторы можно хранить в массиве и выбирать их оттуда по необходимости.

в perl не силён, поэтому пинать никуда не буду :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "помогите реализовать на perl следующие:"  +/
Сообщение от Square (ok) on 25-Сен-09, 19:54 
>[оверквотинг удален]
>Далее нужно поочередно считывать часть содержимого файлов в массив.
>
>Так вот тут возникла трудность, как мне правильно организовать это в цикле.
>
>Никак не могу понять, как можно работать с не фиксированным именем дескриптора
>
>
>Например:
>for(my $i=0; $i<scalar(@file_list); $i++)
>{

$r="FILE_$i";
@table = <$r>;

>@table = <"FILE_".$i> - естественно это не работает!!!
>}
>
>Сорри, в перле новичок, пните в нужную сторону.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "помогите реализовать на perl следующие:"  +/
Сообщение от gloomy_pilgrim (??) on 25-Сен-09, 22:00 
>>Например:
>>for(my $i=0; $i<scalar(@file_list); $i++)
>>{
>
>$r="FILE_$i";
>@table = <$r>;
>>}
>>

Огромное Спасибо, я пробовал так $r=*"FILE_$i";, блин и почему я сразу без звездочки не попробовал.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "помогите реализовать на perl следующие:"  +/
Сообщение от angra (ok) on 27-Сен-09, 01:46 
>my @file_list = `ls $file_tmp`;

Никогда так не делайте, особенно в циклах. Вызывать внешние программы можно только если реализация действия на perl слишком громоздка или проигрывает в скорости. Прочитайте про glob и opendir/readdir/seekdir/итд

>for(my $i=0; $i<scalar(@file_list); $i++)

Это perl а не С, забудьте про циклы такого вида, есть foreach(на самом деле он синоним к for, но для восприятия их различают), есть map. Создавать переменные с индексами в именах еще большая дурость, даже не знаю откуда она, есть же массивы. Примеры:

my @handler_list;
foreach my $name (@file_list) {
  my $file;
  open($file,"<", "$file_tmp/$name") or die "Can't open $file_tmp/$file_name: $!";
  push @handler_list, $file
}
...
foreach my $h (@handler_list) {
@table=<$h>
}

Можно вместо создания переменной и push использовать напрямую элемент массива
foreach my $name (@file_list) {
open($handler_list[scalar(@handler_list)],"<", "$file_tmp/$name") or die "Can't open $file_tmp/$name: $!";
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру