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


Автор: saint 5.2.2006, 18:24
Доброго времени суток.

Подскажите плиз каким образом можно вывести на экран хелп так чтобы абзацы всегда имели такой вид как показано ниже, не зависимо от ширины экрана?

Цитата

PageName|ModuleName...
        is the name of a piece of documentation that you want to look at. You
        may either give a descriptive name of the page (as in the case of
        `perlfunc') the name of a module, either like `Term::Info' or like
        `Term/Info', or the name of a program, like `perldoc'.

BuiltinFunction
        is the name of a perl function.  Will extract documentation from
        `perlfunc'.

FAQRegex
        is a regex. Will search perlfaq[1-9] for and extract any
        questions that match.


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

Заранее благодарен.


Автор: korob2001 6.2.2006, 04:23
Где и как хранятся строки, которые ты хочешь отформатировать?

Автор: saint 6.2.2006, 08:27
Вообще-то предположительно они хранятся в переменных в теле скрипта в виде $head[$i] $description[$i]. Есть ли какие-то преимущества в формировании хелпа из pod-документации скрипта при помощи модуля Getopt, т.е. я так понимаю что он (хелп) буде уже отформатированый?

Автор: korob2001 6.2.2006, 11:08
Я так и не понял, ты хочешь создать документацию POD или же ты просто хочешь вывести на терминал 2 переменные, где одна это заголовок, а вторая это описание?

Если тебе нужна документация, то вот небольшой пример:
Код

package MyClass;

my $count = 0;

=head1 new

       This is constructor of this class.

=cut
sub new {
    my $check = shift;
    my $class = ref( $check ) || $check;
    my $self  = { name => "Anonim",
                  phone => "" };
    bless( $self, $class );
    ++$count;
    return $self;
}

=head1 setName

       The setName() method, set a new value for name of user.

=cut
sub setName {
    my $self = shift;
    $self->{name} = shift;
}

=head1 getName

       The getName() method return name of user.

=cut
sub getName {
    my $self = shift;
    return $self->{name};
}

=head1 getCount

       This method return count of created objects.

=cut
sub getCount {
    return $count;
}

=head1 AUTHOR

       Korobov Denis (korob2001@yandex.ru).

=head1 SEE ALSO

       http://cpan.org

=head1 COPYRIGHT

       This programm is free software. You may copy or
       redistribute it under the same terms as Perl itself.

=cut

1;

Если же тебе нужно просто отформатировать две переменные или два элемента массива, то можешь заюзать format или printf. Для примера, создай текстовый файл, такой структуры:
Код

Title1*Description1
Title2*Description2
Title3*Description3
........
Title(n)*Description(n)

Теперь сохрани в том же каталоге, такой код:
Код

#!/usr/bin/perl -w
use IO::File;

my $fh = IO::File->new("help.txt") or die "Can't open file: $!\n";

while (my $line = $fh->getline()) {
       chomp $line;
       my($title, $description) = split(/\*/, $line);

$~ = STDOUT_TITLE;
write;

format STDOUT_TITLE =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$title
.

print "\n";

$~ = STDOUT_DESCRIPTION;
write;
format STDOUT_DESCRIPTION =
       ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
$description
.
print "\n";
}

$fh->close();

Текстовый файл и сам исходник прицепляю к сообщению. Достаточно распаковать его и запустить программу report.pl

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