Toon posts:

[CGI/PERL] Sorterings probleem met CGI/PERL *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met sortering in CGI/PERL

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 4% gewijzigd door Verwijderd op 22-12-2004 18:13 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45

Verwijderd

Topicstarter
Ik weet niet wat daar wordt bedoeld. Kun iemand mij daarbij helpen. Misschien een stuk verwerken in de code??

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Misschien moet je leren programmeren in Perl, of Engels leren lezen? Reverse keert een lijst (of een scalar, of een hash) om, zoals de naam al doet vermoeden.

Ik kan het woord wel invoegen op de juiste plek in je code (dat is het enige wat hoeft te gebeuren) maar daar leer jij dan niets van, en dat zou jammer zijn. ;)

Verwijderd

Topicstarter
Tja, ik geef toe ik ben niet echt een programmeur maar meer een vormgever.

Ik ben er nog niet helemaal uit hoe ik het toepas.
Maar ik kijk wel even en probeer wel wat.

Dit is mijn oplossing:
code:
1
2
3
4
5
6
7
8
9
$linect = 0;
foreach $line (@lines) {
  chop $line;
  $linect++;
  while($line = pop @lines){
    print "<FONT FACE=Georgia SIZE=2 color=white> $line</FONT><P>\n";
}

}

[ Voor 74% gewijzigd door Verwijderd op 22-12-2004 23:15 ]


Verwijderd

Topicstarter
Ik zit nog met 1 probleem. Het laatste item laat het script 2 x zien.
Wie kan mij helpen?

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

code:
1
2
3
4
foreach $line (reverse @lines) {
  chop $line;
  print qq{<p><font face="Georgia" size="2" color="white">$line</font></p>\n};
}

[ Voor 25% gewijzigd door bRight op 27-12-2004 12:23 . Reden: oeps.. reverse binnen de haakjes :) ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Volgens mij heb je het toch nog niet helemaal goed begrepen, maar in principe zit je met pop wel in de goede richting te denken (je haalt dan immers elementen van de achterkant van de lijst).

Mijn suggestie was om in je oorspronkelijke code gewoon reverse in te voegen voor @lines. (Je itereert dan over de omgekeerde lijst, wat functioneel hetzelfde is als omgekeerd over de lijst itereren).

De code wordt dan:
Perl:
1
2
3
4
foreach $line (reverse @lines) {
  chop $line;
  print qq{<FONT FACE=Georgia SIZE=2 color=white> $line</FONT><P>\n};
}

Twee kanttekeningen: ik heb het tellen van regels (in $linect) achterwege gelaten omdat je die toch nergens gebruikt voor zover ik kan zien en ik zou aanraden om chomp te gebruiken in plaats van chop, als het de bedoeling is om newline characters af te knippen. (Zie voor het verschil de Perl documentatie.)

Jouw oplossing met pop kan ook wel werkend gemaakt worden; dan zou het zoiets worden:
Perl:
1
2
3
4
while($line = pop @lines) {
    chop $line;
    print "<FONT FACE=Georgia SIZE=2 color=white> $line</FONT><P>\n";
}

(Welke variant je voorkeur heeft is voornamelijk een kwestie van stijl en als er heel veel regels zijn is de tweede misschien ook efficienter.)
Pagina: 1