[ niksa @ 13.07.2003. 14:26 ] @
Pozdrav svima,
relativno sam nov u programiranju u ovom programskom jeziku pa sam naisao na jedan glup problem, a to je sortiranje podataka koje procitam iz tekstualne baze podataka, znaci ja podatke cuvam na serveru npr. u fajlu baza.db, a oni su tipa:
nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto2|nesto3|....

e sada, ja znam kako da sve sortiram na osnovu prvog podatka iz baze tj. u ovom slucaju na osnovu podatka "nesto":
Smjestim sve podatke u npr. @podaci, a zatim to sortiram na sledeci nacin:
@podaci = sort {$a <=> $b} @podaci; ako su u pitanju brojevi ili koristim cmp ako su u pitanju slova....

Ali, da li postoji neki nacin da izvrsim isto ovo sortiranje, ali na osnovu npr. podataka "nesto1" ili "nesto2"??? Ovo me interesuje i bas muci!!!
Nadam se da ce mi neko pomoci!!
HVALA UNAPRIJED!
[ MrYoo @ 13.07.2003. 23:51 ] @

Naravno da moze ubacis sve podatke koje zelis u neki novi array i opet sortiras na nacin na koji si to vec radio. E sada ako zeli da sortiras po prvoj koloni recimo a da ne izmesas sadrzaj oda prvu kolonu izloujes pa sortiras i onda uporedjivanjem prikljucis ostale podatke. Ovo je malo prostia varijanta ali radi ako zeli nesto advance ondaa koristi references.
[ mpapec @ 15.07.2003. 14:07 ] @
Citat:
niksa:
Ali, da li postoji neki nacin da izvrsim isto ovo sortiranje, ali na osnovu npr. podataka "nesto1" ili "nesto2"??? Ovo me interesuje i bas muci!!!
Nadam se da ce mi neko pomoci!!
HVALA UNAPRIJED!


Najefikasnije sortiranje za takve potrebe je tzv. schwartzian transform
ako te zanima kako funkcionira, imas sve na,
http://www.pobox.com/~japhy/docs/sorting.html


#!/usr/bin/perl

use strict;
use warnings;

my $str = q{nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto2|nesto3|....
nesto|nesto1|nesto9|nesto3|....
nesto|nesto1|nesto7|nesto3|....
nesto|nesto1|nesto5|nesto3|....
};

my @sorted = SSort(source => \$str, byfield => 2, spliton => '\|');
print join "\n", @sorted;
print "\n\n";

@sorted = SSort(
source => \$str,
byfield => 2,
spliton => '\|',
ssub => sub { $b->[1] cmp $a->[1] }
);
print join "\n", @sorted;
print "\n\n";


sub SSort {
######################################
#
# schwartz. sort
#
######################################

my %arg = @_;
my($source, $byfield, $spliton, $ssub) = @arg{qw/source byfield spliton ssub/};

#default cmp sort
if (!$ssub) { $ssub = sub { $a->[1] cmp $b->[1] } }
elsif ($ssub eq 'num') { $ssub = sub{ $a->[1] <=> $b->[1]} }

#default || separator
$spliton = $spliton ? qr/$spliton/ : qr/\Q||/;

#scalar ref?
if (ref $source eq 'SCALAR') { $source = [split /\n+/, $$source] }
return
map $_->[0],
sort $ssub
map [ $_, (split /$spliton/)[$byfield] ], @$source;
}
[ MrYoo @ 16.07.2003. 13:23 ] @

Sortiranje je jako vazna stvar zabavi se malo sam jer bi to trebalo da znas, a i odlicno je za vezbanje rada sa nizovima.


Pozdrav.
[ mpapec @ 16.07.2003. 14:39 ] @
Vec sam se pozabavio, zato mi i ne predstavlja problem.
[ MrYoo @ 16.07.2003. 23:47 ] @

Za tebe vidim ono je bilo upuceno pokretacu teme kao preporuka.
[ niksa @ 17.07.2003. 14:55 ] @
OK. Hvala vam svima na pomoci...