10
20
30 :
40 match$="NAME" :
50 match$="SURNAME" :
60 verbose%=TRUE
70 max%=23:datamax%=1200:year%=1951
80 DIM head$(max%),info$(max%),data$(datamax%),data%(datamax%)
90 FOR A%=0 TO max%:READ head$(A%):NEXT
100 DATA "HOUSEHOLD NUMBER","SURNAME","NAME","AGE","RELATION","GENDER","MARITAL STATUS","STREET ADDRESS"
110 DATA "OCCUPATION","BIRTH PLACE","BIRTH YEAR","INDIVIDUAL NUMBER","CIVIL PARISH","COUNTY/ISLAND","COUNTRY"
120 DATA "REGISTRATION DISTRICT","REGISTRATION DISTRICT NUMBER","SUB-REGISTRATION DISTRICT"
130 DATA "ED, INSTITUTION, OR VESSEL","PIECE","FOLIO","POSTCODE","PD","POLL"
140 :
150 OFF:ON ERROR REPORT:PROCClose_All:PRINT" at line ";ERL:IF ERR=17:QUIT ELSE ON:END
160 :
170 in%=OPENIN("..\"+STR$year%+"\Whitby"+STR$year%+".csv")
180 IF in%=0:in%=OPENIN("..\"+STR$year%+"\Whitby"+STR$(year%-2)+".csv")
190 :
200 PROCcsv_rd(in%,info$()) :
210 match%=-1:REPEAT:match%=match%+1:UNTIL info$(match%)=match$ OR match%=max%
220 IF info$(match%)<>match$:PRINT"Couldn't find field to match":END
230 :
240 REPEAT
250 PROCcsv_rd(in%,info$())
260 IF info$(1)<>"":PROCprocess
270 UNTILEOF#in%
280 CLOSE#in%:in%=0
290 PROCSort
300 *Spool out.txt
310 A%=0:REPEAT
320
330 IF data$(A%)<>"":PRINT;data%(A%);" ";data$(A%)
340 A%=A%+1:UNTILA%>datamax%
350 *Spool
360 QUIT
370 :
380 DEFPROCprocess
390
400 A$=info$(match%)
410 IF A$="vacant":ENDPROC
420 A%=INSTR(A$,"-"):IF A%=0:A%=INSTR(A$+" "," ")
430 A$=LEFT$(A$,A%-1)
440 A%=-1:REPEAT:A%=A%+1:UNTIL data$(A%)="" OR data$(A%)=A$ OR A%>=datamax%
450 IF A%>=datamax%:PRINT CHR$13;"Too much data";:ENDPROC
460 IF data$(A%)="":data$(A%)=A$
470 data%(A%)=data%(A%)+1
480 :
490 IF verbose% THEN
500 VDU30:A%=0:REPEAT
510 IF data%(A%)>4:PRINT;data%(A%);" ";data$(A%);SPC(23-LENdata$(A%))
520 A%=A%+1
530 UNTIL data$(A%)="" OR A%>=datamax% OR VPOS>29
540 ENDIF
550 ENDPROC
560 :
570 DEFPROCSort
580 LOCAL i%,j%,tmp$:n%=datamax%
590 FOR i%=0 TO n%-2
600 FOR j%=0 TO n%-2-i%
610 IF data%(j%+1) > data%(j%):SWAP data$(j%+1),data$(j%):SWAP data%(j%+1),data%(j%)
620 NEXT
630 NEXT
640 ENDPROC
650 :
660 DEFPROCClose_All
670 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
680 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
690 ENDPROC
700 :
710 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
720 DEFFNuc(A$):LOCAL B$:IFA$="":=""
730 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
740 DEFFNlc(A$):LOCAL B$:IFA$="":=""
750 REPEATB$=B$+CHR$(ASCA$OR((A$<"_")AND&20)):A$=MID$(A$,2):UNTILA$="":=B$
760 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
770 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
780 =A$
790 :
800 DEFPROCcsv_rd(i%,array$())
810 LOCAL n%:n%=0:array$()="":A$=GET$#i%:IFA$="":A$=GET$#i%
820 A$=A$+","
830 REPEAT
840 IF LEFT$(A$,2)="=""":A$=MID$(A$,2)
850 IF LEFT$(A$,1)="""" THEN
860 A%=INSTR(A$,""",",2)+1:array$(n%)=MID$(A$,2,A%-3)
870 ELSE
880 A%=INSTR(A$,","):array$(n%)=LEFT$(A$,A%-1)
890 ENDIF
900 A$=MID$(A$,A%+1):n%=n%+1
910 UNTILA$=""
920 ENDPROC
930 :
940 DEFPROCcsv_wr(o%,array$())
950 LOCAL n%,q%:n%=DIM(array$(),1)
960 FOR A%=0 TO n%:A$=array$(A%)
970 q%=INSTR(A$,",")
980 IF q%=0:q%=(ASCA$=48)AND(INSTR(A$,"/")=0) :
990 IF q%=0:IFVALLEFT$(A$,1):q%=INSTR(A$,"E") :
1000 IF q%=0:q%=LENSTR$VALA$>8 :
1010 IF q%=0:IFVALA$:q%=INSTR(A$,"/")AND(ASCA$<>48):
1020 IF q%=0:q%=LEFT$(A$,1)="-" :
1030 IF q%=0:q%=MID$(A$,3,1)=" "ANDMID$(A$,7,1)=" ":
1040 IF q%:A$=""""+A$+"""":IFINSTR(A$,",")=0:A$="="+A$
1050 BPUT#o%,A$;:IF A%<>n%:BPUT#o%,",";
1060 NEXT A%:BPUT#o%,""
1070 ENDPROC