Forum Webscript.Ru
Программирование => Perl => Тема начата: Energizer от 11 Апреля 2003, 10:39:44
-
написал программку, которая позволяла бы формировать и показывать список из файла, исходя из третьего порядка в строке, т.е.
список в файле:
порядок1|порядок2|18|
порядок1|порядок2|10|
порядок1|порядок2|7|
порядок1|порядок2|0|
программка должна его показывать как
порядок1|порядок2|0|
порядок1|порядок2|7|
порядок1|порядок2|10|
порядок1|порядок2|18|
он она не хочет, ругается, в чем может быть глюк ...
запускается путем - >
filename?name=имя создаваемого файла
сама программа:
#! /usr/bin/perl -w
use CGI qw( param );
use CGI::Carp qw( fatalsToBrowser );
my $filename="sort.cgi";
if(param(\'name\')) {
&create
} else {
&sortlist;
}
## создаем файл
sub create
{
my $sfile=param(\'name\');
$sfile="$sfile.dat";
# если нет такого файла создадим
unless (-e $sfile)
{
open(FILE1,">$sfile") || die("Can\'t create $sfile",$!);
print FILE1 qq~name1|name2|1|\\nname1|name2|5|\\nname1|name2|4|\\n~;
close(FILE1);
chmod(0660,$sfile);
}
print "Content-type: text/html\\n\\n";
print "Список создан";
}
### сортируем его
sub sortlist
{
my $file=param(\'file\');
#Open Rubric
open (FILE, "<$file") or die("Can\'t open $file-file ",$!);
my @lines=;
close(FILE);
print "Content-type: text/html\\n\\n";
print "Сортируем список
";
#Здесь формируем список
foreach(@lines)
{
my($hesh1{$name},$hesh2{$name},$name)=split(/\\|/, $_);
}
#sort
foreach (sort keys %hesh1)
{
print "$hesh1{$_}|$hesh2{$_}
\\n";
}
print "
";
}
заранее спасибо
-
if(param(\'name\')) {
&create
}
-
А если написать так то все работает....
#! /usr/bin/perl -w
use CGI qw( param );
use CGI::Carp qw( fatalsToBrowser );
my $filename="bout.plx";
if(param(\'name\')) {
&create
} else {
&sortlist;
}
## создаем файл
sub create
{
my $sfile=param(\'name\');
$sfile="$sfile.dat";
# если нет такого файла создадим
unless (-e $sfile)
{
open(FILE1,">$sfile") || die("Can\'t create $sfile",$!);
print FILE1 qq~name1|name2|name3|1\\nname1|name2|name3|5\\nname1|name2|name3|4\\n~;
close(FILE1);
chmod(0660,$sfile);
}
print "Content-type: text/html\\n\\n";
print "Список создан";
}
### сортируем его
sub sortlist
{
my $file=param(\'file\');
#Open Rubric
open (FILE, "<$file") or die("Can\'t open $file-file ",$!);
my @lines=;
close(FILE);
print "Content-type: text/html\\n\\n";
print "Сортируем список
";
my $i=0;
foreach (@lines)
{
$i++;
my($name1,$name2,$name3,$name4)=split(/\\|/, $_);
print "- $name1|$name2|$name3|$name4";
}
print "
";
}
только сортировка не происходит :(
-
Поставь перед foreach (@lines):
@lines=sort{(split /\\|/,$a)[3] <=> (split /\\|/,$b)[3]}@lines;
-
Даже не знаю как тебя отблагодарить Phoinix, все в одной строке... элементарно... все заработало.. СПАСИБО!
Ты настоящий друг и программер :)