Sortiranje fajla

Sortiranje fajla

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Naime, potrebno je da nadjem unique redove u jednom fajlu, koji ima 30 000 000 redova. Iz samog razloga sto sav sadrzaj ne moze da stane u memoriju, citaj niz, moram prvo izvrsiti sortiranje redova u drugi fajl. Kako najbrze?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

probaj ovo, ja nisam probao jer nemam sa cim, ali na php.net kazu da radi sa velikim fajlovima:

php.net - function fgets ::When working with VERY large files, php tends to fall over sideways and die.

Here is a neat way to pull chunks out of a file very fast and won't stop in mid line, but rater at end of last known line. It pulled a 30+ million line 900meg file through in ~ 24 seconds.

NOTE:
$buf just hold current chunk of data to work with. If you try "$buf .=" (note 'dot' in from of '=') to append $buff, script will come to grinding crawl around 100megs of data, so work with current data then move on!

<?php //File to be opened $file = "huge.file"; //Open file (DON'T USE a+ pointer will be wrong!) $fp = fopen($file, 'r'); //Read 16meg chunks $read = 16777216; //\n Marker $part = 0; while(!feof($fp)) {    $rbuf = fread($fp, $read);    for($i=$read;$i > 0 || $n == chr(10);$i--) {        $n=substr($rbuf, $i, 1);        if($n == chr(10))break;        //If we are at the end of the file, just grab the rest and stop loop        elseif(feof($fp)) {            $i = $read;            $buf = substr($rbuf, 0, $i+1);            break;        }    }    //This is the buffer we want to do stuff with, maybe thow to a function?    $buf = substr($rbuf, 0, $i+1);    //Point marker back to last \n point    $part = ftell($fp)-($read-($i+1));    fseek($fp, $part); } fclose($fp); ?>


Nadam se da ovo moze da ti pomogne Smile



offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Sumnjam, ali u svakom slucaju hvala

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

jedino da ubacis sve u sql tabelu, cija ce kolona koja sadrzi vrednosti biti index kolona...
sql ce to indexirati, pa onda radi order i select...where po volji...

offline
  • Pridružio: 01 Maj 2003
  • Poruke: 1300
  • Gde živiš: Kragujevac

@peca

to mi izgleda kao jedino resenje. sve ostalo ti je zeznuto i 'komplikovano'

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Linux ima program sort, koji pozivam da sortiram fajl, na nivou linije, a poslije toga je jednostavno iz fajla izvuci unique. Tako da sam na taj nacin to sredio

Ko je trenutno na forumu
 

Ukupno su 499 korisnika na forumu :: 6 registrovanih, 0 sakrivenih i 493 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: anta, bato, Bobrock1, goxin, milenko crazy north, sasa76