Računari 47

OPT-TECH Sort

Dejan Ristanović

Tržište komercijalnog softvera itekako utiče na onu davno izrečenu tvrdnju da 80% računara troši 80% vremena na sortiranje podataka - iako brojne data base aplikacije obezbeđuju sortiranje koje se u reklamama obavezno označava kao "munjevito", u praksi se pokazuje da sortiranje iole veće količine podataka traje neprijatno dugo. Domaći korisnici računara su, osim toga, počašćeni činjenicom da ni jedan program ne može "tek tako" shvatiti da je slovo Č neposredno iza slova C i da reč LJUBAV treba da se nađe iza reči LUNA. Pred nama je prijatna dužnost da testiramo program koji nudi prevazilaženje svih ovih tegoba - Opt-Tech Sort firme Opt-Tech Data Processing.

Na prvi pogled se ne bi reklo da Opt-Tech sort predstavlja neko savršenstvo tehnike - dve skromne diskete sa skromnim nalepnicama, uputstvo štampano na nekom 24-pinskom printeru i uvezano u najobičniju fasciklu, registracioni listić štampan na običnoj dopisnici... Prvi utisak, međutim, ume da bude itekako varljiv - pošto smo na disku slučajno imali jednostavno strukturiranu datoteku dužu od megabajta, otkucali smo SORT ULAZ.DAT ULAZ.SOR /SORT (1, 80, A, C) i pripremili se za šetnju - znali smo da će sortiranje u boljem slučaju potrajati desetak minuta. Kada se standardni prompt pojavio posle neshvatljivih tridesetak sekundi i kada smo se uverili da su podaci zaista sortirani u rastući redosled, iz sve smo se snage bacili na uputstvo za upotrebu koje nismo ispuštali iz ruku dok nismo shvatili šta sve Opt-Tech Sort može; pokazalo se da program nije samo munjevit nego i nezamislivo fleksibilan!

Opt-Tech Sort se može koristiti samostalno i linkovati sa bilo kojim drugim programom na paskalu, bejziku, C-u, kobolu ili asembleru; upotreba je u svakom od ovih slučajeva identična ali se način prenošenja parametara razlikuje. Opt-Tech Sort u principu ima tri parametra: dva čine neophodna imena ulazne i izlazne datoteke (nema prepreke ali ni posebnog razloga da ulazna datoteka bude istovremeno i izlazna) dok je treći neka vrsta komandne linije koja opisuje način sortiranja podataka. Standardne komandne linije su SORT (uređenje podataka) i MERGE (mešanje sortiranih datoteka) pri čemu se parametri svake od ovih komandi navode u zagradi i razdvajaju zarezima.

Zamislimo da datoteka koju treba sortirati sadrži standardne linije teksta konstantne dužine od, recimo, 80 znakova. Prvih pet znakova predstavlja identifikacioni broj (kodiran u vidu niza ASCII cifara), sledećih 25 ime firme a preostalih 50 znakova nekakav komentar koji je sa stanovišta sortiranja nebitan. Komandna linija kojom bi se ova datoteka sortirala po broju glasi /SORT (1, 5, c, a) /FIX (80) dok je za sortiranje po imenu pogodno koristiti /SORT (6, 25, c, a) /FIX (80). Šta da se radi ako podatke treba sortirati po identifikacionim brojevima i, za slučaj da su identifikacioni brojevi jednaki, imenima firmi? Ništa lakše: napišemo /SORT (1, 5, c, a, 6, 25, c, a) /FIX (80); broj polja na ovaj način možemo proizvoljno povećavati pri čemu nema nikakve smetnje da se neka uređuju u rastući (a od Ascending) a druga u opadajući (d od Descending) niz.

Slovo c u prethodnim komandama označavalo je da su podaci koji se sortiraju nizovi znakova; Opt-Tech Sort podržava i tekstualne podatke (velika i mala slova se ne razlikuju), označene i neoznačene binarno kodirane cele brojeve, Borlandove 6-bajtne i 10-bajtne racionalne brojeve, Majkrosoftove 4-bajtne i 8-bajtne racionalne brojeve, brojeve u pokretnom zarezu, IEEE brojne podatke, cele brojeve, racionalne brojeve kodirane u vidu niza ASCII cifara (sa ili bez desnog poravnanja), pakovane decimalne brojeve i kobolski formatirane konstante. Oznaka FIX(80) opisuje tip ulaznih (i samim tim izlaznih) zapisa - računar mora da zna da je dužina svakog zapisa fiksna kako bi odredio broj (sa stanovišta sortiranja nebitnih) bajtova koje treba prepisati pri zameni slogova. Ponekad ćemo, naravno, poželeti da sortiramo obične redove teksta u kom slučaju parametar FIX treba izostaviti - Opt-Tech Sort će znati da se redovi završavaju sa <><> i poštovati ovakav format. Čak ni dužine pojedinih ključeva ne moraju da budu fiksne - programu se može saopštiti da je ključ peti podatak u redu pri čemu su separatori zarezi ili, po potrebi, neki drugi simboli.

Pominjanjem tekstualnih fajlova dolazimo do veoma zanimljivog pitanja formata ulaznih i izlaznih datoteka koje Opt-Tech Sort podržava. Parametrom FILETYPE možemo specificirati Btrieve, Cobol indexed, Cobol relative, Cobol Sequential, dBASE II, dBASE III, Forced EOF, Fixed, Fortran unformatted, Lahey Unformatted, mbp Cobol sequential, PC Bus tab compressed, Realia Cobol V, TAB expand i TEXT format (izvinjavamo se zbog neprevedenih naziva ali - ko bi sve ovo preveo?) pri čemu nema nikakve prepreke da tip ulazne datoteke bude jednak tipu izlazne - Opt-Tech Sort smo koristili čak i da bismo dBASE III datoteku (bez ikakvog sortiranja) preveli u format koji odgovara Turbo Pascalu!

Ukoliko svi ovi formati zakažu, malo detaljnijim proučavanjem Opt-Tech Sort-a naučićete da samostalno pripremate podatke koje ćete slati programu koji će sa, svoje strane, na isti način vraćati rezultate koje možete da upišete u neku datoteku čiji ste format sami izmislili.

Posebna dragocenost je mogućnost rada sa oznakama. Zamislimo da se datoteka koju treba sortirati sastoji od izuzetno dugih segmenata teksta iz kojih treba izdvojiti neki relativno kratak ključ (npr. ime firme) koji je sa stanovišta uređenja jedini bitan. Napisaćemo program koji ključeve izdvaja u posebnu datoteku pri čemu se uz svaki ključ dopisuje oznaka (tag) tj. redni broj odgovarajućeg sloga. Opt-Tech Sort će izvršiti uređenje samih ključeva a onda, ukoliko izrazite želju za tim, "presložiti" osnovnu datoteku prema novom redosledu - na ovaj se način strahovito dobija kako u brzini (u toku sortiranja se nepotrebno ne manipuliše velikim segmentima podataka) tako i na fleksibilnosti (ključ ne mora da bude niz uzastopnih znakova već se može izdvojiti po veoma složenim kriterijumima).

I za kraj čuveni problem YU slova. Prilikom uređenja teksta Opt-Tech Sort primenjuje ASCII redosled ali se, primenom parametra Altseq (Alternate collating sequence) ovaj niz može po volji prilagođavati. Priprema Altseq datoteke nije baš jednostavna (format je očito prilagođen programu za sortiranje a ne neiskusnom korisniku) ali je treba obaviti samo jednom - docnije sortiranje se svodi na pozivanje odgovarajuće definicije. Prilikom kreiranja možete se poslužiti .ALT datotekama koje se isporučuju sa programom - UPPER.ALT obezbeđuje sortiranje kod koga se mala slova ne razlikuju od velikih a EBCDIC.ALT sortiranje podataka koji su kodirani (korisnicima personalnih računara slabo poznatim) EBCDIC kodom.

Alternativni redosled znakova krije i jedinu zamerku koju možemo da uputimo autorima Opt-Tech Sort-a: nije im palo na pamet da u nekim jezicima niz od dva slova u stvari predstavlja jedno slovo što znači da korektno sortiranje već pomenutih reči LJUBAV i LUNA izlazi izvan domena ovog fascinantnog programa. U cilju rešavanja ovog problema na slici dajemo jednostavan program na Turbo Pascalu koji proizvoljan tekst konvertuje u međukod koji će Opt-Tech Sort bez problema urediti u niz koji, vraćen u normalan YUSCII set, garantuje korektan tretman dvoznaka LJ, NJ i DŽ. Da bi stvar bila posebno lepa, međukod će vam uštedeti kreiranje alternativne datoteke YU.ALT.

Na radnim disketama date su razne .OBJ, .LIB i .TPU datoteke pomoću kojih se Opt-Tech Sort linkuje sa programima koji su pisani na asembleru, Turbo Pascalu v3 i v4, IBM Pascalu, Digitalovom, Microsoftovom i Lahey Fortranu, dBASE-u, Clipper-u, raznim verzijama kobola, Microsoftovom i Turbo C-u, Quick i Turbo Basic-u i brojnim drugim jezicima. Isprobali smo pozivanje iz Turbo Pascala 4.0 i ustanovili da je izuzetno jednostavno i savršeno pouzdano.

Iako naoko neatraktivna, dokumentacija programskog paketa Opt-Tech Sort je detaljna, kvalitetna i pravilno usmerena prema korisnicima kojima nema potrebe objašnjavati gde se računar pali i koja je strana diskete gornja. Poseban kvalitet su razni tehnički podaci koje većina proizvođača softvera ljubomorno čuva otežavajući tako realnu procenu performansi programa. Svi naši brzinski testovi (pogledajte tabelu) pokazali su da firma Opt-Tech Data Processing zaista ne mora da se boji konkurencije!

Prikazujući razne programe čovek obično potroši sve superlative i, kada naiđe na neki program koji ga je u pravom smislu oduševio, ne zna kojim bi ga rečima izdvojio iz grupe drugih takođe veoma kvalitetnih programerskih i korisničkih alatki. Da pokušam ovako: kada bi mi neko oduzeo Opt-Tech Sort i uništio onih desetak u međuvremenu napravljenih rezervnih kopija smatrao bih da me je zadesila teška elementarna nepogoda!

Brzinski test

Brzinu programa OptSort najlakše je ilustrovati poređenjem sa poznatim dBASE-om. Najpre smo kreirali jednostavnu bazu podataka koja ima samo jedno jedino alfanumeričko polje dugo osamdeset znakova. Analizirali smo dobijenu .dbf datoteku i ustanovili da je format sasvim dostižan: 64 bajta zaglavlja i onda slogovi konstantnih dužina pri čemu slog počinje "režijskim" bajtom koji ima vrednost $20 (blanko). Na samom početku zaglavlja (počevši od četvrtog bajta) upisan je broj slogova u bazi kodiran kao dugi intidžer.

Program sa slike pisan je u Turbo Pascalu i ima isključiv zadatak da popuni bazu podataka glupostima - koristili smo generator slučajnih brojeva i generisali 10,000 slogova od po osamdeset znakova ne zaboravljajući ni modifikovanje dimenzija datoteke iz hedera. Pošto smo se uverili da dBASE III+ prihvata ovako "divlje" kreiran fajl, izabrali smo opciju sortiranja. Čitav postupak je za našu datoteku od oko 810 K trajao 2 minuta i 32 sekunda i proizveo datoteku koju smo nazvali PROBASOR.DBF.

Isti posao se primenom Opt-Tech sort-a obavlja kucanjem komandne linije: sort proba.dbf proba.sor /sort (2, 81, c, a) f (fix, 80) h (64, r) ve - sort (2, 81, c, a) nalaže da se znakovni (c) podaci sortiraju u rastući (a) redosled pri čemu ključ počinje od drugog (prvi bajt je, sećamo se, režijski) i završava se 81. znakom. Slogovi su fiksne dužine, heder od 64 bajta se preskače i prepisuje rezultujućoj datoteci (h (64, r) i zahteva se ispisivanje izveštaja o radu (ve). Rezultujuća datoteka je nastala posle svega 40 sekundi što je ne samo skoro četiri puta brže od dBASE-a III + nego i brže od našeg Turbo Pascal programa koji je potrošio čitavih 58.5 sekundi da generiše slučajni sadržaj datoteke!

Poređenjem datoteka PROBASOR.DBF i PROBA.SOR ustanovljena je identičnost bitnih delova - dBASE je iz razloga u koje se nismo upuštali modifikovao jedan bajt hedera a OptSort, pošto mu to nije ni traženo, nije prepisao EOF bajt kojim se dBASE datoteka završava.

Za testiranje je korišćen IBM PC AT koji radi na 13.2 MHz bez stanja čekanja i Seagate-ov disk od 80 megabajta sa srednjim vremenom pristupa 25 ms.

Lična karta

Program Opt-Tech Sort

Verzija 4.0e, 7. oktobra 1988.

Namena Sortiranje podataka

Sadržaj paketa Dve diskete i uputstvo

Hardversko-softversko okruženje IBM PC/XT/AT ili kompatibilan, 45 KB RAM-a, flopi ili hard disk, DOS 2.0 ili noviji.

Zauzet prostor na disku 30 K

Ulaz tastatura

Izlaz - ekran svaki

Dokumentacija 150 A5 strana

Proizvođač Opt-Tech Data Processing P.O. Box 678 Zephyr Cove, NV 89448 U.S.A.

Hvalimo 1. Izvanrednu brzinu 2. Potpunu fleksibilnost 3. Malo zauzeće memorije 4. Interfejs za razne programske jezike i formate datoteka

Kritikujemo 1. Ime koje se kosi sa DOS komandom SORT (tek da nešto zamerimo) 2. Probleme sa slovima LJ, NJ i DŽ.