Могу ли я разделить несколько логических страниц в текстовом файле, который я создаю в Perl? - PullRequest
2 голосов
/ 27 февраля 2010

До сих пор я успешно генерировал выходные данные для отдельных файлов, открывая файл для вывода как часть внешнего цикла и закрывая его после записи всех выходных данных. Я использовал переменную подсчета ($ x) и добавил к ней .txt, чтобы создать имя файла, и записал его в тот же каталог, что и мой скрипт на perl. Я хочу немного увеличить код, запросить у пользователя имя файла, открыть этот файл один раз и только один раз и записать выходные данные по одной «печатной букве» на страницу. Это возможно в простом тексте? Из того, что я понимаю, chr (12) является символом перевода строки ascii и приблизит меня к тому, что я хочу, но есть ли лучший способ? Заранее спасибо, ребята. :)

sub PersonalizeLetters{
    print "\n\n Beginning finalization of letters...";
    print "\n\n I need a filename to save these letters to.";
    print "\n Filename > ";
    $OutFileName = <stdin>;
    chomp ($OutFileName);
    open(OutFile, ">$OutFileName");                 
    for ($x=0; $x<$NumRecords; $x++){
        $xIndex = (6 * $x);
        $clTitle = @ClientAoA[$xIndex];
        $clName = @ClientAoA[$xIndex+1];        
        #I use this 6x multiplier because my records have 6 elements.
        #For this routine I'm only interested in name and title.
        #Reset OutLetter array
        #Midletter has other merged fields that aren't specific to who's receiving the letter.      
        @OutLetter = @MiddleLetter;
        for ($y=0; $y<=$ifLength; $y++){
            #Step through line by line and insert the name.
        $WorkLine = @OutLetter[$y];                 
        $WorkLine =~ s/\[ClientTitle\]/$clTitle/;
        $WorkLine =~ s/\[ClientName\]/$clName/;
        @OutLetter[$y] = $WorkLine;

        }           

        print OutFile "@OutLetter";
        #Will chr(12) work here, or is there something better?
        print OutFile chr(12);
        $StatusX = $x+1;
        print "Writing output $StatusX of $NumRecords... \n\n";
    }
    close(OutFile);
}

1 Ответ

1 голос
/ 16 марта 2010

Разделите "страницы" с помощью каналов, но вы должны делать это после каждой страницы, а не в конце. Я не уверен, что PersonalizeLetters должен делать, но похоже, что вы используете его для печати всех букв. В таком случае, я думаю, вам просто нужно немного его реструктурировать. Выполните все настройки вне подпрограммы, передайте имя файла, затем сделайте то, что вам нужно сделать для каждой записи. После обработки записи распечатайте ленту форм:

sub PersonalizeLetters
    {
    my( $OutFileName ) = @_;

    open my $out, '>', $OutFileName 
        or die "Could not open $OutFileName: $!";                 

    for( $x=0; $x < $NumRecords; $x++ )
        {
        print "Writing output $x of $NumRecords...\n\n";
        print $out $stuff_for_this_record;
        print $out "\f";
        }           

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...