27500 REM ...LIST SORTFILE.BAS ett pgm fr}n Egils programmeri 27600 REM N%=antal records per sortering N9%=totalt antal records. N0%=antal delsorteringar. 27620 REM E=SANT om EOF annars FALSKT F=SANT om det g|rs flera del- sorteringar. 27800 N1$='DR1:SORTFIL' : N2$='E' : N3$='.FIL' 27810 F3$=N1$+N2$+N3$ 27910 ; CHR$(12) 27920 ; 'Programmet sorterar filen FILEFILE.FIL och l{gger resultatet i SORTFILE.FIL i drive 1.' : ; 27930 ; 'D{refter g}r det vidare till utskrifts- delen var du kan v{lja utskrift p} sk{rmeller p} skrivare.' 27950 GOSUB 39990 28000 REM SORTCORE Snabb sortering i minnet i korrekt alfabetisk ordning av fil 28010 REM Program av Gunnar Tidner 28020 REM Key P9%=1% (start) L9%=8% (sorteringsl{ngden) Recordl{ngd R9%=15% 28030 M%=17600% : REM anpassas efter tillg{ngligt minne 28035 M%=15000% 28040 F1$='DR1:FILEFILE.FIL' : REM ; "Infil : "; : INPUT F1$ 28050 R9%=15% 28060 P9%=1% : L9%=8% 28070 N%=M%/(R9%+L9%+4%) 28080 ; : ; "Kan sortera h|gst";N%;" records" 28085 A%=N%*R9%+N%*(L9%+4%) : ; 'Beh|ver';A%;' bytes minst' 28090 DIM Q$(N%)=R9%,S$(N%)=L9%+4%,B$=17% 28100 OPEN F1$ ASFILE 1 28110 F3$='DR1:SORTFILE.FIL' 28120 IF LEN(F3$)=0 THEN F3$=F1$ 28130 ONERRORGOTO 28220 28140 FOR I%=1% TO N% 28150 INPUTLINE #1,B$ : B$=LEFT$(B$,LEN(B$)-2%) 28160 IF RIGHT$(B$,LEN(B$))=" " THEN B$=LEFT$(B$,LEN(B$)-1%) : GOTO 28160 28170 B$=B$+SPACE$(R9%-LEN(B$)) 28180 Q$(I%)=B$ 28190 A$=MID$(B$,P9%,L9%) 28200 S$(I%)=SPACE$(5%-LEN(NUM$(I%)))+RIGHT$(NUM$(I%),2%)+A$ 28210 NEXT I% 28215 F=-1 : GOTO 28240 28220 IF ERRCODE=34% THEN CLOSE 1 : E=-1 : N%=I%-1% ELSE ; "Fel nr";ERRCODE : CLOSE 1 : STOP 28240 ; "Start sortering" 28250 M%=N% : J9%=0% : N9%=N9%+N% 28260 M%=M%/2% 28270 IF M%=0% THEN 28360 28280 FOR J%=1% TO N%-M% 28290 FOR I%=J% TO 1% STEP -M% 28300 K%=I%+M% 28310 J9%=J9%+1% 28320 IF RIGHT$(S$(I%),5%)<=RIGHT$(S$(K%),5%) THEN 28350 28330 T$=S$(K%) : S$(K%)=S$(I%) : S$(I%)=T$ 28340 NEXT I% 28350 NEXT J% : GOTO 28260 28360 OUT 6,131 : ; "Sorterat";N%;" records "; 28370 ; J9%;" j{mf|relser" 28380 ONERRORGOTO 28480 28385 IF F THEN F3$=N1$+RIGHT$(NUM$(N0%),2%)+N3$ 28390 PREPARE F3$ ASFILE 2 28400 FOR I%=1% TO N% 28410 J%=VAL(LEFT$(S$(I%),4%)) 28420 B$=Q$(J%) 28430 ; #2,B$ 28440 NEXT I% 28445 CLOSE 2 28450 ; "Sorterad fil: ";F3$ 28460 IF NOT E THEN N0%=N0%+1% : F=-1 : GOTO 28130 28465 IF E AND F GOTO 29000 28470 CHAIN "FILDUBLT.BAS" 28480 ; "Fel nr";ERRCODE : STOP 28490 F3$=N1$+RIGHT$(NUM$(N0%),2%)+N3$ : RETURN 29000 REM ...Kollationering av de sorterade filerna till storfil SORTFILE.FIL 29010 CLOSE 1 : PREPARE 'DR1:SORTFILE.FIL' ASFILE 10 29020 N8%=N% : REM ..sista sorteringsgruppen 29030 ; N9%' filnamn sorterade och lagrade' 29035 F8%=N0% : F9%=F8%+1% 29038 ONERRORGOTO 29900 29040 FOR N0%=0% TO F8% : F3%=N0%+1% 29050 GOSUB 28490 29060 OPEN F3$ ASFILE F3% 29070 INPUTLINE #F3%,B$ : B$=LEFT$(B$,LEN(B$)-2%) 29090 M$(F3%)=B$ 29100 NEXT N0% 29200 REM ...HITTA N[STA I YTAN 29210 M%=1% : M$=M$(1%) 29220 FOR F3%=2% TO F9% 29230 IF M$>M$(F3%) THEN M$=M$(F3%) : M%=F3% 29240 NEXT F3% 29300 ; #10,M$ 29305 ; M$' '; 29310 N7%=N7%+1% : IF N7%>=N9% GOTO 29600 29350 ONERRORGOTO 29390 29360 INPUTLINE #M%,B$ : M$(M%)=LEFT$(B$,LEN(B$)-2%) 29370 GOTO 29210 29390 IF ERRCODE=34% THEN M$(M%)=']]]]' : GOTO 29370 ELSE ; 'Fel nr'ERRCODE : GOTO 29900 29600 REM ...AVSLUTNING 29610 CLOSE 10 : FOR N0%=0% TO F8% : CLOSE N0%+1% : GOSUB 28490 : KILL F3$ : NEXT N0% 29620 CHAIN 'FILDUBLT.BAS' 29900 FOR I%=1% TO 10% : CLOSE I% : NEXT I% : STOP 39990 K9%=PEEK(65064%)*256%+PEEK(65063%)-PEEK(65057%)*256%-PEEK(65056%) 39992 ; : ; "Det {r ";K9%;" bytes kvar i maskinen" : ; : RETURN