Forum Webscript.Ru
Программирование => Perl => Тема начата: micolo от 18 Апреля 2007, 13:50:15
-
Доброго времени суток!
У меня простой вопрос, но решить самому быстро не получается. Есть скрип который обрабатывает логи по нужному формату.
push @a, [split /\\|/] while <>;
for(my $y=0; $y<@a; $y++) {
for(my $x=0; $x<@{$a[$y]}; $x++) {
format STDOUT=
@<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<
$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x]
.
write();
}
}
Мне нужно чтобы запись из массива записывалась в строчку. Я у меня получается в столбик - где моя ошибка?
-
Во-первых, очень сомневаюсь, что вот эта конструкция может корректно работать:
push @a, [split /|/] while <>;
| - специальный символ в перловых регекспах, надо ескейпить, и лучше бы результат split сохранять в отдельном массиве. Получится подлиннее, но зато работает:
#!/usr/bin/perl
use Data::Dumper;
while ( my $str = <> ) {
chomp $str;
my @split = split /\\|/, $str;
push @a, \\@split;
}
#push @a, [split /\\|/] while <> ne "quit\\n";
#print Dumper( @a );
for(my $y=0; $y<@a; $y++) {
for(my $x=0; $x<@{$a[$y]}; $x++) {
format STDOUT=
@<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<
$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x],$a[$y]->[$x]
.
write;
}
}
Остальное не трогал - зачем вообще выводить по восемь одинаковых слов в строке :)?
-
да нашёл такой пример в инете, вообще мне нужно чтобы в строке были разные значения....
-
Впервые вижу пример использования format-write в перле :)
По-моему, для форматирования текста вполне достаточно (s)printf:
#!/usr/bin/perl
use strict;
my @a;
while ( my $str = <> ) {
chomp $str;
last if lc($str) eq "quit";
my @split = split /\\\\|/, $str;
push @a, \\\\@split;
}
for(my $y=0; $y<@a; $y++) {
for(my $x=0; $x<@{$a[$y]}; $x++) {
printf "%10s", $a[$y]->[$x];
}
print "\\n";
}
P.S. Движок почему-то тупо вырезает обратные слеши внутри тегов PHP. Должно быть:
my @split = split /\\|/, $str;
push @a, \\@split;
-
micolo
Покажите пожалуйста входящую строку, и вид как бы Вы хотели эту строку отформатировать.
Впервые вижу пример использования format-write в перле
По-моему, для форматирования текста вполне достаточно (s)printf:
Формат используется для построения аскии-отчетов, видимо их Вам просто не приходилось делать, т.к. для контроля элайтмента Вам придется написать минимум 3 функции, а есть еще футеры, хедеры, номера страниц... Все это реализуемо, но когда реализуете, поймете, что это давно есть и Вы изобрели велосипед.