Email me

'$include "PB35.INC" wordt niet gebruikt in dit programma
'*************************************************************************
'** This code is written by: Henk Broekhuizen, 01-NOV-2000              **
'** for use with PB/DOS 3.2 and later                                   **
'*************************************************************************
'** Status: this source is donated to the public domain                 **
'**                                                                     **
'*************************************************************************
'** No responsibility is assumed or accepted. Use at your own risk.     **
'*************************************************************************
'**                                                                     **
'** Henk Broekhuizen                                                    **
'** http://pb.doorhet.net                                               **
'** http://www.henkhenk.com                                             **
'**                                                                     **
'*************************************************************************


'Programma voor het bedrukken van acceptgiro kaarten (3 per vel)

CLS
printer$="LPT1:"
mededeling$="Donatie 2000"

'Variabele voor stapsgewijs testen van de functionaliteit
test=0
'testfase 1&2: alleen naar een bestand schrijven
'testfase 3: wel printen, maar na ‚‚n bladzijde stoppen met printen
'testfase 4: wel printen, maar stoppen na drie bladen
'testfase 5: printen pas beginnen vanaf lijstnummer >124

'++++++++++++++++++ Defini‰ren van de constanten zoals marges, aantallen +++
top=1000 'maximaal aantal namen

linkermarge=19 'afstand tussen uiterst links en de plaats van NAW=lm

tab1=5 'tabulatie tussen linkermarge en bedrag in guldens
tab2=5 'tabulatie tussen guldens en centen
tab3=5 'tabulatie tussen bedrag en mededeling bij een bedrag<>0
tab4=18 'tabulatie tussen bedrag en mededeling bij een bedrag=0
tab5=1 'tabulatie tussen voorletters en achternaam

regel1=1 'regels tussen eerste bedrag en bovenkant
regel2=6 'regels tussen bedrag en NAW
regel3=14 'aantal regels tussen twee giro's


'benoemen waar de data staat, er wordt niet getest op het bestaan ervan
'zonodig dit doen met: if Exist(invoer$) .....
' invoer$="c:\pb\sources\accept~1\sadres.txt"
invoer$="c:\dorpshui\donateur.txt"

'++++++++++++++++++ Declaraties +++++++++++++++++++++++++++++++++
DIM nummer(top),voorl$(top),naam$(top),straat$(top),plaats$(top),bedrag$(top),temp$(top)

IF test>=3 OR test=0 THEN
uitvoer$=printer$: 'tijdens testen uit-REM-men
ELSE
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'maak voor test een file aan ipv uitvoer meteen naar de printer
'neem het complete pad van het invoerbestand en het eerste deel
'van de bestandsnaam. Vervang de extensie door TMP
a$=invoer$
a=INSTR(a$,".")
IF a= 0 THEN
'bestandsnaam bevat geen punt dus deze toevoegen met als extra TMP
uitvoer$=invoer$+".TMP"
ELSE
WHILE RIGHT$(a$,1)<>"." AND LEN(a$)>1
a$=LEFT$(a$,LEN(a$)-1)
WEND
uitvoer$=a$+"TMP"
END IF
END IF

lm$=SPACE$(linkermarge) 'maak een een string van de linkermarge


'============== We kunnen los: beginnen met het bronbestand ==============
OPEN invoer$ FOR INPUT AS #1
OPEN "c:\temp.txt" FOR OUTPUT AS #9

aantal=0
PRINT "Inlezen NAW"
WHILE (NOT EOF(1)) AND (aantal<top)
INCR aantal
' input #1,voorl$(aantal),naam$(aantal),straat$(aantal),plaats$(aantal),bedrag$(aantal)
INPUT #1,bedrag$(aantal),naam$(aantal),voorl$(aantal),straat$(aantal),plaats$(aantal)
PRINT #9,naam$(aantal)
nummer(aantal)=aantal: 'gebruiken we straks voor het sorteren
WEND
PRINT "Gereed met lezen"
CLOSE #1
CLOSE #9

'=============== In dit geval sorteren op plaats en straat =================
GOSUB Sorteer


'=============== Gereed maken voor de uitvoer: naar keuze naar een file op device (LPT) ====
PRINT "Printen cq wegschrijven"
OPEN uitvoer$ FOR OUTPUT AS #9

'creeer bovenmarge voor de eerste keer
FOR s=1 TO regel1
PRINT #9,""
NEXT s

'het hele bestand doorlopen
FOR r=1 TO aantal

'bedrag: vervang de punt door een reeks spaties
a$=bedrag$(nummer(r)):a=VAL(a$)
IF a<>0 THEN
'bedrag staat extra naar rechts tov de linkermarge
REPLACE "." WITH SPACE$(tab2) IN a$
PRINT #9,lm$+SPACE$(tab1)+a$+SPACE$(tab3)+mededeling$+" "+STR$(nummer(r))
ELSE
'geen bedrag gegeven of geen cijfers in het bedrag
PRINT #9,lm$+SPACE$(tab4)+mededeling$+" "+STR$(nummer(r))
END IF

FOR s=1 TO regel2
PRINT #9,""
NEXT s

PRINT #9,lm$+voorl$(nummer(r))+ SPACE$(tab5)+naam$(nummer(r))
PRINT #9,lm$+straat$(nummer(r))
PRINT #9,lm$+plaats$(nummer(r))

'na drie acceptgiro's komt het volgende vel, dus formfeed geven
IF r/3=INT(r/3) THEN

'formfeed: werp de bladzijde uit
PRINT #9,CHR$(12); 'FF

IF test=3 THEN EXIT FOR 'stop na ‚‚n blad bij testen
IF test=4 AND r=>9 THEN EXIT FOR 'stop na drie vellen
LOCATE 10,1

' delay(5): ' laat de inkt even drogen . . .
PRINT "Bezig met giro's van bladzijde ";INT(r/3)+1;


'cre‰er bovenmarge op nieuwe vel
FOR s=1 TO regel1
PRINT #9,""
NEXT s
ELSE
'anders de scheidingsruimte tussen twee giro's op een vel
FOR s=1 TO regel3
PRINT #9,""
NEXT s
END IF

NEXT r
PRINT
PRINT "Klaar met de opdrachten"
PRINT


CLOSE #1
CLOSE #9
CLOSE
END

'***********************************************************************
Sorteer:
PRINT "Het bestand sorteren op plaats en straat"
'copieer eerst het sleutelveld naar een tijdelijke array voor het sorteren
'op straat ivm bezorgen door eigen mensen
FOR r=1 TO aantal
temp$(r)=plaats$(r)+"/"+straat$(r)
NEXT r

'sorteer zonder verschil tussen 'a' en 'A'
ARRAY SORT temp$() FOR aantal,COLLATE UCASE,TAGARRAY nummer()

'door deze array te gebruiken als nieuwe index wordt er op plaats en
'straat-volgorde de informatie verwerkt
PRINT "Sorteren gereed"

Bezoek het PB forum in het Nederlands en/of teken mijn gastenboek.

Datum laatste aanpassing:
29 december 2003 03:41:44

Email mij voor reacties,
aanvullingen en correcties