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


Автор: fregat 23.10.2006, 13:06
Уважаемые программисты!!!

Прошу помочь в слудующем вопросе:

из формы передаю в скрипт значение, допустим a=12....
вопрос такой, а как сделать вывод из текстового файла только той строки (в данном случае 12)

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

Автор: amg 23.10.2006, 13:36
Вывести 12-ю строку текстового файла? Я правильно понял?
Код
my $file = 'file.txt';
my $str_num = 12;
open FILE, $file or die "Can't open $file: $!\n";
while (<FILE>) {
  print && last if $.==$str_num;
}
close FILE;

Автор: fregat 23.10.2006, 13:50
Спасибо за помощь!!! Все супер!!!

Автор: fregat 23.10.2006, 14:18
В текстовом файле данные разбиты двойным двоиточием:

009::2,65::2,79::290::21::700::001::001

При выводу получаем чистый вывод строки

009::2,65::2,79::290::21::700::001::001

В скрипте есть вывод из масива, а как привязать 
Код

$str_num = 12;


к

Код

print "Content-type: text/html\n\n";

$file = "news.txt"; # Файл с сообщениями

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if (!$buffer) {
$buffer=$ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $form{$name} = $value;
}

$id = $form{'news'};

open (NEWS1, "$file");
@list=<NEWS1>;
close (NEWS1);
#for ($i=0;$i<@list;$i++)
 
($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8)=split(/::/,$list);


Автор: amg 23.10.2006, 14:45
Опять приходится догадываться, что же ты хочешь smile 
Пресловутый текстовый файл, в котором 12-ю строку нужно расщепить по :: -- это NEWS1 ? Если да, то 
Код
chomp @list;
($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8)=split(/::/,$list[$str_num-1])

или, модифицируя мой пример, 
Код
while (<NEWS1>) {
  if ($.==$str_num) {
    chomp;
    @a = split /::/, $_;
    print "@a";
    last;
  }
}

Автор: fregat 23.10.2006, 15:35
Возмодно у меня руки кривые или нехватает опыта.... не получилось.....
Исходный код изначальный...
Код

#!/usr/bin/perl

print "Content-type: text/html\n\n";

$file = "news.txt"; # Файл с сообщениями

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
if (!$buffer) {
$buffer=$ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $form{$name} = $value;
}

$id = $form{'news'};

open (NEWS1, "$file");
@list=<NEWS1>;
close (NEWS1);
#for ($i=0;$i<@list;$i++)
foreach $list (@list){

($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8)=split(/::/,$list);


print <<EOF;

$a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8<br>

EOF
}



Автор: amg 23.10.2006, 15:52
Ты так и не ответил. Текстовый файл, в котором 12-ю строку нужно расщепить по :: -- это NEWS1 ? Если да, то вместо
Код
foreach $list (@list){
($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8)=split(/::/,$list);
print <<EOF;
$a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8<br>
EOF
}
 напиши
Код
chomp @list;
$str_num = 12;
($a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8)=split(/::/,$list[$str_num-1]);
print <<EOF;
$a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8<br>
EOF

Автор: fregat 23.10.2006, 15:57
Спасибо!!! Все Ок...

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