Sortering probleem met CGI/PERL

Pagina: 1
Acties:
  • 29 views sinds 30-01-2008

  • Torrac
  • Registratie: Juli 2001
  • Laatst online: 28-08-2025

Torrac

The Barbarian Wolverine

Topicstarter
Hallo,

Ik ben bezig een highscore lijst te maken vanuit een platte file. opzich werkt dit goed maar ik heb nog een probleem

Het probleem is dat ik op 2 waarden wil sorteren en het lukt me niet, ik zie iets over het hoofd.

Ik zou graag eerst sorteren op veld 1 en dan op veld 2

in file data.db staat het volgende:
test|2|23000
test2|3|3400

Script:
#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);

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

open(INF,"data.db") or dienice("Can't open data.db: $! \n");
@totscore = <INF>;
close(INF);

print <<EndOfHTML;

<HTML><HEAD><TITLE>Highscore</TITLE>
</HEAD>
<BODY text="#FFFFFF" bgcolor="#000000" link="#FFFF00" leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<center><BR>
<h3>HighScore:</h3><BR>
<table border=0>
<TR><TD align="center">Player's Name</TD><TD align="center">The Score</TD><TD align="center">Number of Balls</TD></TR>
EndOfHTML

foreach $i (sort byballs @totscore) {
chomp($i);
($player,$balls,$score) = split(/\|/,$i);
print "<TR><TD align=\"center\">$player</TD><TD align=\"center\">$score</TD><TD align=\"center\">$balls</TD></TR>";
}


print <<EndOfHTML;
</table>
</BODY></HTML>
EndOfHTML

sub byballs {
@a = split(/\|/,$a);
@b = split(/\|/,$b);
$a[2] <=> $b[2]
}

sub dienice {
my($msg) = @_;
print "<h2>Error</h2>\n";
print $msg;
exit;
}

Deze script sorteert nu alleen op veld 3.

Wat doe ik fout :? :?

I believe what I want to Believe


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Move W&G -> P&W

  • Torrac
  • Registratie: Juli 2001
  • Laatst online: 28-08-2025

Torrac

The Barbarian Wolverine

Topicstarter
Kan niemand mij verder helpen??

I believe what I want to Believe


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
code:
1
sort -t '|' +1 +2 -n -o data.db data.db

Zoiets? (Geen Perl nodig.)

  • Torrac
  • Registratie: Juli 2001
  • Laatst online: 28-08-2025

Torrac

The Barbarian Wolverine

Topicstarter
Op vrijdag 12 juli 2002 12:25 schreef Soultaker het volgende:
code:
1
sort -t '|' +1 +2 -n -o data.db data.db

Zoiets? (Geen Perl nodig.)
Ik gebruik dit op WWW dus moet ik een sort doen op de ingelezen array en kan ik dus niet sort op commandprompt doen.

Maar toch bedankt.

I believe what I want to Believe


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Op vrijdag 12 juli 2002 12:35 schreef Torrac het volgende:
Ik gebruik dit op WWW dus moet ik een sort doen op de ingelezen array en kan ik dus niet sort op commandprompt doen.
Maar je script begint zo:
#!/usr/bin/perl
Het is je dus toegestaan om de Perl applicatie uit te voeren. Dan zal het je zeker wel toegestaan zijn om een applicatie als /usr/bin/sort uit te voeren vanuit je Perl script.

Kijk even naar system en exec in de perlfunc man-page.

edit:
Denk eraan dat de code die ik je gaf, voor het sorteren van het bestand zelf is. Als je gewoon inhoud van het bestand gesorteerd wilt weergeven, moet je de -o switch weglaten.

  • Torrac
  • Registratie: Juli 2001
  • Laatst online: 28-08-2025

Torrac

The Barbarian Wolverine

Topicstarter
oke, zal het gaan proberen.

I believe what I want to Believe


  • Torrac
  • Registratie: Juli 2001
  • Laatst online: 28-08-2025

Torrac

The Barbarian Wolverine

Topicstarter
Ik heb het probleempje opgelost door de sub byballs aan
tepassen naar dit:

sub byballs {
@a = split(/\|/,$a);
@b = split(/\|/,$b);
($b[1] <=> $a[1]) || ($b[2] <=> $a[2])
}

nu wordt eerst in kolom 2 gechecked en als die gelijk zijn dat sort het op kolom 3.

(Even alles over sort commando gelezen)
Ikke RTFM.

I believe what I want to Believe


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Op vrijdag 12 juli 2002 13:47 schreef Torrac het volgende:
Ik heb het probleempje opgelost door de sub byballs aan
tepassen
Oh ja, dat had ik je inderdaad ook nog willen vertellen, maar dat was er bij ingeschoten. ;)

(Maar niets is bevredigender dan het zelf oplossen, natuurlijk.)

Verwijderd

Ik heb een probleem met sortering.

Ik gebruik een tekstbestand als database.
De laatst toegevoegde regel wordt netjes onderaan de lijst in het tekstbestand geplaatst.

Alleen wil ik de laatst toegevoegde regel bovenaan de lijst hebben staan op mijn webpagina.

Dit is de code die de regels uit het tekst bestand haalt.
code:
1
2
3
4
5
6
$linect = 0;
foreach $line (@lines) {
  chop $line;
  $linect++; 
  print qq{<FONT FACE=Georgia SIZE=2 color=white> $line</FONT><P>\n};
}


Ik heb hier de boel draaien: www.tomatos.nl/test.html (ff wat invullen en je komt in de lijst te staan)

[ Voor 8% gewijzigd door Verwijderd op 22-12-2004 17:40 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19-05 13:45

gorgi_19

Kruimeltjes zijn weer op :9

McHummer, open even een nieuw topic met eventueel een verwijzing naar dit topic :) Je hebt grote kans dat men gaat reageren op eerdere postings of de topicstart, waar je dus weinig aan hebt omdat jouw probleem iets anders is :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.