Toon posts:

[PERL] sorteren op datum

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een zoek scriptje draaiende, deze zoekt in diverse directories en geeft de resultaten weer, ik wil alleen dat de nieuwste advertenties ook bovenaan verschijnen.

ik heb nu dit, maar dit werkt uiteraard niet...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ($category eq 'none') {
open(CATFILE, "$datapath/cat.file");
@cats = <CATFILE>;
close(CATFILE);

foreach $cato (@cats) {
chomp ($cato);
($catdir, $catname) = split(/:/,$cato); 

    opendir(CAT, "$catpath/$catdir");
    @ads = grep { /.dat/ } readdir(CAT);
    closedir(CAT);

[b]@adds = sort {$b cmp $a} @ads;[/b]

foreach $ad (@adds) {

    open(AD, "$catpath/$catdir/$ad");
    @array=<AD>;
    close(AD);

Weet iemand dus hoe ik alle bestanden op datum met de nieuwste van boven naar beneden toe kan krijgen?

Het liefst nog dat de datums over alle dirs word gesorteerd en niet per dir.

foute voorbeeld:
dir 1: 1.dat 05-02-2002
dir 1: 3.dat 03-02-2002
dir 2: 2.dat 04-02-2002

goede voorbeeld:
dir 1: 1.dat 05-02-2002
dir 2: 2.dat 04-02-2002
dir 1: 3.dat 03-02-2002

alvast bedankt,
groeten Richard

Verwijderd

alhoewel ik je database structuur een beetje heel erg brak vind, en je code niet echt super overzichtelijk met die namen, maar toch heppik maar effe gekeken,

probeer eens <=> ipv cmp

Verwijderd

Topicstarter
Ik weet dat de structuur er niet echt perfect uitziet maarja...

En wat jij zegt heb ik al geprobeerd en lukte niet.
Weten jullie misschien de code zodat ie alles op server tijd sorteert? Dus de nieuwste bovenaan..

  • Ees
  • Registratie: Juli 2001
  • Laatst online: 29-07 15:00

Ees

probeer eens <=> ipv cmp
Wat dacht je daarmee te bereiken? Er zitten bestandsnamen in die array. :?
code:
1
my @sorted_by_mtime = sort { -M $a <=> -M $b } @ads;

Denk er wel aan dat "-M bla.dat" een file in de "current directory" test. Je zult dus de directorynaam moeten prependen (-M $dirname/$a), of eerst chdir-en. Hoe je dat precies gaat doen, in combinatie met die sort over alle directories mag je zelf uitzoeken :P

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Ik denk dat je probleem in de namen van de .dat bestanden zit. Als je de volgorde jaar maand dag aan zou houden ipv dag maand jaar kun je gewoon
code:
1
@ads = sort(@ads);

doen. Nu is 2 februari 2002 eerder dan 30 december 2001.