Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > <write format> неправильный порядок в файле


Автор: trent 26.1.2010, 05:20
Привет, всем !
я токо начал делать на Перле один репорт и не могу понять почему мои <writes format> в репорте идут в каком-то непонятном порядке, не так как программа их пишет. наверное есть какой-то buffer или еще чего я не понимаю,  + я делаю мульти filehandles к одному и тому же файлу.
Помогите советом кто-может, как сделать мой скрипт чтобы он писал в spool.txt все по порядку.
Я вижу что если делать  OPEN/CLOSE на каждый write то все нормально, но енто уже будет слишком.
Мой файл довольно большой,  300+К рекордов. Может кто может посоветовать как сделать все еффективно, я смотрел методы reports, etc., но пока ето не не надо, мои репорт довольно простой, все готово, токо разобратьса с етой проблемой. 

Спасибо
Владимир

ето мой скрипт для теста только:
======================
#!/usr/bin/perl
use strict;
use warnings;
my $cc="1";
unlink ('spool.dat');
open (OUT_LOG, '>>spool.dat');
open (OUT_HEADER, '>>spool.dat');
open (OUT_DETL, '>>spool.dat');
open (OUT_FOOT, '>>spool.dat');
open (OUT_BR, '>>spool.dat');

#=============================================================================================
format OUT_HEADER=
@<<<====      f0rmat HEADER HEADER HEADER           Page : @<<<
$cc, $cc 
.
format OUT_DETL=
@<<<========  f0ramt   detail line  =======================
$cc
.
format OUT_FOOT=
@<<<========  f0rmat  ===========FOOTER
$cc
.
format OUT_BR=
@<<<========= fOrmat  BREAK 
$cc
.
#===============================================================================================
write OUT_HEADER; $cc++;

write OUT_DETL; $cc++;
write OUT_DETL; $cc++;
write OUT_DETL; $cc++;
    write OUT_BR;    $cc++;

print OUT_LOG "$cc ................print after 1st break \n"; $cc++;

write OUT_DETL; $cc++;
write OUT_DETL; $cc++;
write OUT_DETL; $cc++;
    write OUT_BR; $cc++;
print OUT_LOG "$cc ...............print after 2nd break \n"; $cc++;

write OUT_FOOT; $cc++;

print  "basta \n";


Автор: sir_nuf_nuf 26.1.2010, 11:32
А зачем вам форматы в perl ?

Дело в том, что это ооочень старый функционал, можно сказать наследственный
И сейчас никто им не пользуется (Ну кто будет смотреть отчеты в виде простых текстовых файлов ?)

А т.к. никто ими не пользуется - то с советами тоже будет проблема.

Так что 

а) если изучаете их для самообразования - можете смело забить и перейти к следующей теме
б) если хотите строить отчеты.. - сформулируйте изначальную задачу

Автор: trent 27.1.2010, 07:49
Спасибо за инфу, но мне все равно надо сделать простой .тхт фаил для печати и просмотра.
тут вариантов нету. Задача чисто практическая, все сформулировано, тест скрипт к услугам. 

Основной скрипт почти готов, токо надо совет как бороться с етими бафферами, чтоб все было по порядку.


Влад



Автор: DurRandir 27.1.2010, 12:14
Форматы действительно никто не использует smile Проблема похожа на буфферизацию на разных уровнях - но так ли это и как решать, не подскажу. Посмотрите лучше в сторону шаблонизаторов - cpan://HTML::CTPP2. Им можно выводить что угодно, в т.ч. простой текст. Этот шаблонизатор хорош в плане отделения данных от кода, что, в том числе, поможет улучшить сам код.

Автор: trent 27.1.2010, 13:00
Спасибо за инфо cpan://HTML::CTPP2, к сожелению ето пока не для меня, равно как методы  reporter, etc.

Да далеко все ушли, будем ждать динозавров.

Один спец посоветовал сделать один filehandle с  var и писать разные форматы через него,  попробую сделать.


Влад

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)