Автор Тема: как созать конструкцию ...  (Прочитано 11586 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« : 16 Мая 2007, 06:56:22 »
Здраствуйте Все !

Скажи те гуру перла, как реализовать вот такой подход:

есть изначально текстовый файл который необходимо обработать. В этом текстовом файле я как писатель скрипта изначально не знаю формат, таких различных файлов может быть множество. Есть скрипт который должен все это обрабатывать перобразовывать и записывать куда нить. В этом и сложность задачи, что заранее не известно ни формата файлов, ни что с ними делать - отсюда вывод отдать все на откуп, того кто знает формать и как его разбирать, забирать у человека такой инструмент как перл, выдумывая свои универсальные обработчики - это кощунственно. Поэтому принято решение пусть тот кто знает формат сам пишет программу(модуль, пакадж и т.д.) по обработке этого только ему известного файла.

Теперь вопрос: я не знаю ни формат файла, ни того как его обрабатывать, не знаю какие процедуры будудт использованы для обработки файлов, мне нужно предложить каое то решение , согласно которому, можно будет подключать к моему скрипту основному который всегда выполняется, скрипты которые напишут те люди которые будут обрабатывать текстовые файлы (их скрипты могут делать следующее взять конкретный файл и его преобразовать сохранив результаты), далее их скрипты завершаются и продолжается выполнение моей программы далее пока все текстовые файлы не будут обработаны.
и блин самый простой вопрос который можно только себе представить , как это сделать на perl?

С уважением,
Erl.

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
как созать конструкцию ...
« Ответ #1 : 16 Мая 2007, 09:09:43 »
perldoc -f open

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #2 : 16 Мая 2007, 13:33:49 »
if (если это) {require файл с кодом}, где в файле с кодом определенный метод обработки файлов.

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #3 : 16 Мая 2007, 13:48:29 »
Цитировать
xmolex:
if (если это) {require файл с кодом}, где в файле с кодом определенный метод обработки файлов.



А вот с этого мета можно по точнее, плиз...

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

Sub Name_SUB
{
   .... мой код
}

или что то другое ????

плиз уточните очень нужно !!!

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #4 : 16 Мая 2007, 13:50:00 »
Цитировать
xmolex:
if (если это) {require файл с кодом}, где в файле с кодом определенный метод обработки файлов.



И еще, один ворпос ?
Этот файл просто текстовый файл или у него должен быть определенный формат ...

Оффлайн xmolex

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 75
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #5 : 16 Мая 2007, 15:09:17 »
В файле с кодом обработки вы можете написать подпрограммы, а можете кусок кода. Писать #!/usr/bin/perl не надо.

Там где вы напишете require, в то место просто вставится код из файла, который вы укажите. Файл не специфичный, обычный кусок кода.

Если у вас в файле 1.pl, всего одна строка print "Hello";,
то там где вы выполните require, выполнитеся код print "Hello";, соответственно выведется Hello.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
как созать конструкцию ...
« Ответ #6 : 17 Мая 2007, 00:19:53 »
Цитировать
erl:
Теперь вопрос: я не знаю ни формат файла, ни того как его обрабатывать, не знаю какие процедуры будудт использованы для обработки файлов, мне нужно предложить каое то решение


делаешь спецификацию на интерфейс модуля/класса - мол каждый разработчик должен будет свою поделку оформить соответствующим образом и там обязательно будут процедуры A, B, C  - ты знаешь что подавать им на вход (например строку или файл) и знаешь что они тебе возвратят (например хеш с разобранными параметрами)
ну и тебе остается подгружать эти модули и вызывать эти процедуры (а процедуры у всех одни и те же по названию и входным/выходным данным)
 в исканиях.

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #7 : 17 Мая 2007, 07:19:44 »
Цитировать
Green Kakadu:
делаешь ..... модули и вызывать эти процедуры (а процедуры у всех одни и те же по названию и входным/выходным данным)



Да я все это понимаю ...

все я получил ответ на свои вопрос , мне этого достаточно, я все понял ... БОЛЬШОЕ СПАСИБО, ГУРУ ПЕРЛА!!!

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #8 : 12 Ноября 2007, 10:54:14 »
Привет !

Вот через пол года пришлось мне вернуться к теме

вот создал я коl

@list = qw(/home/user/perl/p1.pl)

for(i=0;i<10;i++)
{
     require $list;
}

все работает один раз когда подгружается модуль p1.pl, а когда необходимо еще раз его использовать он не выполняет его ...

в описании require написано верно что типо подгружаемый модуль будет выполнени всего один раз на момент загрузки, но я не увидел(не заметил - уж тыкнете носом не поленитесь), где написано как его повторно перезапусить на выполенние?

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #9 : 12 Ноября 2007, 11:07:24 »
блин поправлюсь чуствую что фигню написал

#ссылка на хэш в котором прописаны пути к исполняемым модулям
%$ref_mask_body_parser

$value_mask_body_parser - в переменной записано "/home/user/perl/p1.pl", "/home/user/perl/p2.pl" "/home/user/perl/p3.pl"

foreach $value_mask_body_parser  (values %$ref_mask_body_parser)
{   
     require $value_mask_body_parser
}

при запуске все работает только один раз ...
при повторной обращении на выполнение p1.pl, ни чего не выполняется?

еще раз, как повторно в ходе выполения основного скрипта, еще раз запустить на выполение дополнительный p1(1,2,3).pl ?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
как созать конструкцию ...
« Ответ #10 : 12 Ноября 2007, 11:48:30 »
%INC

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #11 : 12 Ноября 2007, 12:53:30 »
arto

Извиняюсь, я не понял , по подробней можно !
я понимаю что в э том хэше складываются все загруженные модули, как его выташить я тоже понимаю , $INC{\'filename\'}, как его повторно выпонить не понимаю ... ?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
как созать конструкцию ...
« Ответ #12 : 12 Ноября 2007, 13:21:28 »
# cat > aa.pm
package aa;
print STDERR "call aa\\n";
1;
^D
# print -e \'require aa; require aa; delete $INC{"aa.pm"}; require aa;\'
call aa
call aa
#

Оффлайн erl

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #13 : 12 Ноября 2007, 13:50:19 »
я туповатый тугодум, и опыта у меня маловата, спасибо....!
все вроде начало получаться ... !
Я думал что нужно удалять подгруженный модуль, но не знал как, еще раз удивляюсь PERL какое простое решение ...

Спасибо !!!

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
как созать конструкцию ...
« Ответ #14 : 30 Ноября 2007, 15:52:49 »
Со скрипом пишу. вижу што умничаю через чур, вы уж простите

Вобще require помоему какоето некрасивое и неправильное решение.

Лучше бы разбить решение на *управляющий скрипт* и *скрипты конверторы* все будет выглядеть логичней и красивее.

функции *управляющего скрипта*:
1) формирование листинга
2) инициализация исходной конфигурации работы скрипта
3) запуск *скриптов конвертеров*/*внешний вызов*/
4) ведение лога выполнения

если какоето время с этим помучится можно запускать *скрипты конверторы* отдельным потоком или процессом /*пока путаюсь в определении*/

и если дописать к этому решению возможность конфигурирования через интерфейс взаимодействия с пользователем. будет вобще красиво
убили кенни, сволочи

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28