demo
Laddar in värden från en textfil i en array enligt nedan:
$array[$k][0] =$1;
$array[$k][1] =$2;
$array[$k][2] =$3;
$array[$k][3] =$4;
$array[$k][4] =$5;
När jag sedan skriver ut arrayen vill jag att den är sorterad efter vad som finns i första elementet $array[$k][0]
Vet i och för sig vilket kommand jag skall använda då jag sorterat arrayer förut. Får det dock inte att fungera.
Har gjort enligt nedasntående princip (med lite olika exprimentförändringar)
@array = sort { $b->[0] <=> $a->[0] } @array;
Hur sorterar jag denna array efter dess första element? Hur avgör jag vilket elemnet som den skall sortera efter, exempelvis om jag vill ha sorterat efter 3:e elementet?
Mvh,
Demo
------------------
Den som vandrar ödmjukhetens väg drabbas inte av trafikstockningar.
[Redigerat av demo den 09 dec 2000]
RobbanMedlem sedan dec. 19992 555 inlägg Det du redan skrivit fungerar utmärkt för mig. Jag kanske missförstår hur du vill ha det sorterat?
Hur avgör jag vilket elemnet som den skall sortera efter, exempelvis om jag vill ha sorterat efter 3:e elementet?
Byt ut 0:an mot en 2:a.
------------------
Robban < robban@lipogram.com >
demo
Hej Robban, och tack för din hjälp!!
Arbetar med en databas för mina mp3 filer.
Man kan söka efter artist, låttitel, musikkategori, mm. Resultatet visas därefter i en tabell på skärmen.
Problemet är dock att jag skulle vilja ha listan sorterad.
Tycker precis som du, att den kodsnutt som nämns borde fungera. Lägger jag till kodsnutten i programmet så skrivs inget resultat ut, över huvudtaget.
Tar jag bort kodsnutten, så skrivs resultatet ut. Dock osorterat.
Det enda som händer när jag lägger till @array = sort { $b->[0] <=> $a->[0] } @array; är att inget resultat alls skrivs ut på skärmen.
Vet inte vad det kan bero på men något måste vara knas i soretringskommandot?
Har som jag nämnde använt kommandot tidiagare och då har det fungerat ok, så jag vet inte vad som kan vara knas. Lägger med koden, om det kan vara till någon hjälp för dig att se problemet.
Mvh,
Demo
#!/usr/bin/perl
$databas="databas.txt";
################################################
###### Tar emot uppgifter från formuläret ######
################################################
$forminfo=$ENV{'QUERY_STRING'};
$forminfo=~tr/+/ /;
$forminfo=~s/%(..)/pack("c",hex($1))/ge;
@par=split(/&/,$forminfo);
foreach $a (@par){
($ruta, $text)=split(/=/,$a);
$INFO{$ruta}=$text;
}
###############################
### Skriver ut tabelltoppen ###
###############################
print "<div align=center><table border=\"0\" width=\"700\" bgcolor=\"#FFFFFF\">";
print "<tr>";
print "<td width=\"32\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Nr:</b></font></td>";
print "<td width=\"170\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Musiker:</b></font></td>";
print "<td width=\"270\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Låttitel:</b></font></td>";
print "<td width=\"75\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Kat:</b></font></td>";
print "<td width=\"55\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Kb:</b></font></td>";
print "<td width=\"39\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>Sv</b></font></td>";
print "<td width=\"39\" valign=\"top\"><font face=\"Courier New\" size=\"2\"><b>CD</b></font></td>";
print "</tr></b>";
##############################
### Letar igenom textfilen ###
##############################
$k=0;
$nr=0;
open (LOGG,"$databas");
while ($rad=<LOGG> ){
$rad=~/(.*)::(.*)::(.*)::(.*)::(.*)::(.*)/;
$musiker=$1;$text=$2;$kategori=$3;$storlek=$4;$svenskt=$5;$cd=$6;
if($musiker=~/$INFO{'musiker'}/i || $INFO{'musiker'} eq ""){
if($kategori=~/$INFO{'kategori'}/i || $INFO{'kategori'} eq "-------- Samtliga --------"){
if($text=~/$INFO{'text'}/i || $INFO{'text'} eq ""){
if($svenskt eq $INFO{'svenskt'}|| $INFO{'svenskt'} eq "Bägge alternativen"){
$k++;
$array[$k][0] =$musiker;
$array[$k][1] =$text;
$array[$k][2] =$kategori;
$array[$k][3] =$storlek;
$array[$k][4] =$svenskt;
$array[$k][5] =$cd;
}
}
}
}
}
close (LOGG);
@array = sort{$a->[0] <=> $b->[0]}@array;
until ($nr eq $k){
$nr++;
print "<tr>";
print "<td width=\"32\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$nr.</font></td>";
print "<td width=\"170\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][0]</font></td>";
print "<td width=\"270\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][1]</font></td>";
print "<td width=\"75\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][2]</font></td>";
print "<td width=\"55\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][3]</font></td>";
print "<td width=\"39\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][4]</font></td>";
print "<td width=\"39\" valign=\"top\"><font face=\"Courier New\" size=\"2\">$array[$nr][5]</font></td>";
print "</tr></b>";
}
#########################
### Avslutar tabellen ###
#########################
print "<font face=\"Courier New\" size=\"2\"><p>Sökresultat: $k träffar.</font><p>";
print "</tr></td></table>";
exit;
[Redigerat av demo den 10 dec 2000]
RobbanMedlem sedan dec. 19992 555 inlägg Hittar i.o.f.s. ett fel, men det bör inte ge de symtom du beskriver.
Du använder <=> för att jämföra strängar. Ändrar din första rad till:
#!/usr/bin/perl -w
Då bör du få ett varningsmeddelande, typ:
Argument "foo" isn't numeric in numeric comparison (<=> ) at ./script.pl line X.
För att jämföra strängar används cmp.
@array = sort{ $a->[0] cmp $b->[0] } @array;
Några söktips kan du hitta på manualsidan för sort.
perldoc -f sort
(Fungerar inte perldoc så kan det hända att din dokumentation levererats i något annat format, som t.ex. HTML).
------------------
Robban < robban@lipogram.com >
demo
Hej Robban!
Skall prova dina tips och se om det går bättre.
Använder notepad, samt en sabmbarserver för att köra scripten lokalt.
Har provat detta med "-w" men aldrig lyckats få några felmeddelanden. Vad beroro det på?
Skulle underlätta en hel del om ferlmeddelandena dök upp, för då blir det ju som en självhjälp, eller "hjälp-till-självhjälp."
Mvh,
Demo
------------------
Den som vandrar ödmjukhetens väg drabbas inte av trafikstockningar.
RobbanMedlem sedan dec. 19992 555 inlägg Kör du scriptet som CGI ser du normalt sett inte varningar och felmeddelanden i webläsarfönstret (felmeddelanden brukar dyka upp i webserverloggen dock). Men kör du scriptet från kommandoprompten bör du se dem.
Du kan lägga till följande rad någonstans i scriptet för att få ut felmeddelanden i webläsarfönstret:
use CGI::Carp qw(fatalsToBrowser);
------------------
Robban < robban@lipogram.com >
demo
Tack för hjälpen och tipsen Robban.
De kommer att komma till nytta :)
Ha dé bra!
Mvh,
Demo
------------------
Den som vandrar ödmjukhetens väg drabbas inte av trafikstockningar.