Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Системное программирование > ООП, модульное программирование в Perl |
Автор: burakov 13.8.2008, 15:56 |
Добрый день. подскажите пожалуйста возможно ли на перл реализовать следующее: 1. есть модуль который читает текстовый файл (в котором прописаны абсолютные пути файлам на диске). 2. а есть модуль который может заархивировать файл (ну например при помощи zip.exe) в модуль подставляется имя файла, который нужно заархивировать. Вопрос: как передать в программу (объединяющую эти два модуля) из 1 го модуля текущую читаемую строку? с тем чтобы подставить эту строку во второй модуль для архивирования файла. Дополнительное пояснение: Я не написал что я возвращаю из 1 го модуля, поскольку можно из него вернуть массив, содержащий строки (имена файлов), и тогда понятно как перебирая массив подставить его элементы во второй модуль. Но на этот путь становиться не хочется, потому как текстовый файл, который содержит в себе строки с именами файлов, получается после сканирования HDD и может быть очень большим, поэтому помещение его в массив скажется на производительности. Из 1го модуля необходимо добыть конкретную читаемую в данный момент времени строку... при этом такую вот придуманную модульность "рушить" не хочется... поскольку понятно, что задача "заархивировать файлы в каталоге" проста. Суть именно в том как в данном случае сделать это через вот такие вот модули. Спасибо. |
Автор: ginnie 13.8.2008, 16:10 | ||
Уважаемый burakov, если использовать ООП, то
Классы Reader::TextFile и Packer::Zip - это Ваши классы, которые читают и упаковывают. |
Автор: burakov 14.8.2008, 11:09 |
Да, красиво получилось. Еще бы коды этих классов в студию, вообще бы все мои вопросы бы разрешились. может у Вас какой примерчик готовый есть? ибо я понял теперь что перл при помощи ООП может реализовать то, что я хочу, но как реально необходимые классы написать я не знаю. собственно вопрос теперь в том каким образом сработает функция get_filename(). вообщем нужен живой пример классов. спасибо. p.s. все таки есть смутное сомнение ![]() Reader::TextFile читает файл в массив, а потом $reader->get_filename() получает через shift имя файла из массива и все красиво работает. ну как я уже писал выше на собственном опыте убедился (да и товарищи на этом форуме подсказывают тоже самое), что работать через массив можно и нужно, если количество количество строк положенных в массив НЕВЕЛИКО. в моем же случае количество строк прочитанных my $reader = Reader::TextFile->new(filename => 'file.txt') может быть большим порядка 5000 и более строк. поэтому хотелось бы не пихать эти строки в массив, а как то вот по другому... и при этом вот соблюсти ООП, потому как я привел фрагмент проекта, а так программка уже на 2000 строк (может конечно для кого то это и не много), но я уже начинаю путаться где у нее начало, а где конец и че мне от нее надо... ![]() Извиняюсь, если я чего не понял... вообщем на то и форум. очень нужны коды классов... Спасибо. |
Автор: ginnie 14.8.2008, 11:40 | ||||
Уважаемый burakov, вот Вам пример
Объект класса Reader::TextFile строится на основе файлового дескриптора. |
Автор: burakov 18.8.2008, 07:49 |
Огромное спасибо. Все понял. Это действительно то, о чем я спрашивал ![]() И работает так, как мне надо. |