Lars Gjörling
<6825>
· Text 7238 · w8 · kommentar
1987-07-29 13:42
Ärende: Ännu en fråga!
Här är ett förslag till funktioner för att lösa ditt problem:
10 INTEGER : EXTEND
10000 DEF FNSkapaloggfil
10010 ! 20 st poster a 30 bytes. Varje post har 2 fält:
10020 ! 1) 20 bytes för namnet. 2) 10 bytes för datum.
10030 PREPARE "LOGGFIL.DAT" AS FILE 99
10040 PUT #99,STRING¤(20*30,0)
10050 CLOSE 99
10060 RETURN 0
10070 FNEND
10080 ! ----------------------------------------------------
11000 DEF FNUpdateloggfil(Namn¤) LOCAL N,Post¤=30
11010 IF Namn¤="" RETURN 0 ELSE ON ERROR GOTO 11140
11020 OPEN "LOGGFIL.DAT" AS FILE 99
11030 N=19 ! Post nr 19 flyttas till 20, post 18 till 19 osv.
11040 WHILE N>0
11050 POSIT #99,30*(N-1) : GET #99,Post¤ COUNT 30
11060 PUT #99,Post¤
11070 N=N-1
11080 WEND
11090 IF LEN(Namn¤)>20 Post¤=LEFT¤(Namn¤,20) ELSE Post¤=Namn¤
11100 Post¤=Post¤+SPACE¤(20-LEN(Post¤))+LEFT¤(TIME¤,10)
11110 POSIT #99,0 : PUT #99,Post¤
11120 CLOSE 99
11130 RETURN -1
11140 ; CHR¤(7) "Fel nr " ERRCODE : RETURN 0
11150 FNEND
11160 ! -----------------------------------------------------
12000 DEF FNSkrivutloggfil LOCAL N,Post¤=30
12010 ON ERROR GOTO 12140
12020 OPEN "LOGGFIL.DAT" AS FILE 99
12030 ; CHR¤(12) "Utskrift av loggfil (20 senaste inloggningarna):"
12040 ; "Namn" TAB(22) "Datum:"
12050 ; STRING¤(31,45)
12060 N=20 ! Utskrift med den äldsta posten först.
12070 WHILE N>0
12080 N=N-1 : POSIT #99,30*N : GET #99,Post¤ COUNT 30
12090 IF ASCII(Post¤)=0 THEN 12110
12100 ; LEFT¤(Post¤,20) TAB(22) RIGHT¤(Post¤,21)
12110 WEND
12120 CLOSE 99
12130 RETURN -1
12140 ; CHR¤(7) "Fel nr " ERRCODE : RETURN 0
12150 FNEND
12160 ! -----------------------------------------------------
OPEN och CLOSE behöver kanske inte göras varje gång funktionerna an-
ropas, utan kan göras i början resp slutet av huvudprogrammet.
Mvh Lars