Thread View: comp.apps.spreadsheets
1 messages
1 total messages
Started by Marc Ries
Tue, 14 Nov 1995 20:31
DIF or SYLK parser?
Author: Marc Ries
Date: Tue, 14 Nov 1995 20:31
Date: Tue, 14 Nov 1995 20:31
103 lines
5196 bytes
5196 bytes
I need to be able to extract the data in a DIF or SYLK file(s).
I have cruised the internet with little or no concrete examples
in archives or newsgroups.
One poster did pass along a document that included a BASIC
program for reading a sample DIF file.
Can any Basic->C programmers translate the following for me? Even
better, does anyone know of source (C or awk) for parsing a SYLK
or DIF spreadsheet file? Thanks
Marc Ries
ries@venice.sedd.trw.com
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sample BASIC program that reads a DIF file
This program uses the output DIF file from the previous sample
to calculate an average score and letter grade for each student.
100 :REM - THIS PROGRAM READS A DIF FILE CONTAINING THE TEST
110 :REM - SCORES OF A GROUP OF STUDENTS, CALCULATES AN AVERAGE
120 :REM - SCORE FOR EACH STUDENT, MATCHES THE AVERAGE TO A LETTER
130 :REM - GRADE, AND PRINTS THE STUDENT'S NAME, AVERAGE,
140 :REM - AND LETTER GRADE.
500 DIM T(100) :REM - MAXIMUM OF 100 VECTORS.
510 DIM V(100) :REM - T IS THE TYPE INDICATOR,
520 DIM V$ (100) :REM - V IS THE NUMBER VALUE,
530 :REM - AND V$ IS THE STRING
535 :REM - VALUE OF EACH DATA VALUE.
540 GOSUB 5000 :REM - INITIALIZATION SUBROUTINE
550 GOSUB 6000 :REM - SUBROUTINE TO READ HEADER
560 FOR I = 1 TO NT :REM - FOR EACH TUPLE,
570 GOSUB 7000 :REM - GET ALL VECTOR ELEMENTS
575 :REM - IN TUPLE.
580 M=0 :REM - M = SUM OF THE SCORES
590 FOR J = 1 TO NV :REM - FOR EACH VECTOR VALUE,
600 IF T(J)=1 THEN PRINT V$(J) :REM - PRINT NAME.
610 IF T(J)=0 THEN M = M+V(J) :REM - ADD SCORES.
620 NEXT J
630 M = M/(NV-1): PRINT M :REM - PRINT STUDENTS' AVERAGE
640 IF M<=50 THEN PRINT "THIS STUDENT'S FINAL GRADE IS F"
650 IF M<=70 AND M>50 THEN PRINT "THIS STUDENT'S FINAL GRADE IS D"
660 IF M<=85 AND M>70 THEN PRINT "THIS STUDENT'S FINAL GRADE IS C"
670 IF M<=94 AND M>85 THEN PRINT "THIS STUDENT'S FINAL GRADE IS B"
680 IF M>94 THEN PRINT "THIS STUDENT'S FINAL GRADE IS A"
690 NEXT I
700 CLOSE 2
710 PRINT "FINISHED CALCULATING GRADES"
720 STOP
5000 :REM - INITIALIZATION CODE.
5010 PRINT "FILE NAME";
5020 INPUT F$
5030 OPEN "I",2,F$ :REM - OPEN FILE FOR INPUT.
5040 NV = 0 :REM - INITIAL VECTOR COUNT.
5050 NT = 0 :REM - INITIAL TUPLE COUNT.
5060 RETURN
6000 :REM - READ HEADER. GET NUMBER OF VECTORS AND TUPLES.
6010 INPUT#2,T$ :REM - GET TOPIC.
6020 INPUT#2,S,N :REM - GET VECTOR NUMBER & VALUE
6030 INPUT#2,S$ :REM - GET STRING VALUE
6040 IF T$="VECTORS" THEN 6500 :REM - CHECK FOR KNOWN HEADER
6050 IF T$="TUPLES" THEN 6600 :REM - ITEMS.
6060 IF T$="DATA" THEN RETURN :REM - "DATA" ENDS HEADER
6070 GOTO 6010 :REM - IGNORE UNKNOWN ITEMS.
6500 NV = N :REM - NUMBER OF VECTORS
6510 IF NV<=100 THEN 6010 :REM - CHECK FOR < 100 VECTORS
6520 PRINT "TOO MANY VECTORS. PROGRAM CAPACITY 100 VECTORS."
6530 CLOSE 2
6540 STOP
6600 NT = N :REM - NUMBER OF TUPLES.
6610 GOTO 6010 :REM - GET NEXT HEADER ITEM.
7000 :REM - SUBROUTINE TO GET ALL VECTOR ELEMENTS IN A TUPLE.
7010 GOSUB 8000 :REM - GET NEXT DATA VALUE.
7020 IF T1<>-1 THEN 9000 :REM - MUST BE A BOT, ELSE ERROR
7030 IF S$<>"BOT" THEN 9000
7040 FOR K=1 TO NV :REM - GET EACH DATA VALUE.
7050 GOSUB 8000
7060 IF T1>1 THEN 9000
7070 T(K) = T1 :REM - SAVE TYPE INDICATOR.
7080 V(K) = V1 :REM - SAVE NUMBER VALUE.
7090 V$(K) = S$ :REM - SAVE STRING VALUE.
7100 NEXT K
7110 RETURN
8000 :REM - SUBROUTINE TO GET NEXT DATA VALUE.
8010 INPUT#2,T1,V1 :REM - GET TYPE INDICATOR
8020 INPUT#2,S$ :REM - NUMERIC VALUE, AND
8030 RETURN :REM - STRING VALUE.
9000 :REM - ERROR ROUTINE
9010 PRINT "ERROR IN FILE FORMAT"
9020 CLOSE 2 :REM - END PROGRAM
9030 STOP
9040 END
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads