🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.apps.spreadsheets
1 messages
1 total messages Started by Marc Ries Tue, 14 Nov 1995 20:31
DIF or SYLK parser?
#336
Author: Marc Ries
Date: Tue, 14 Nov 1995 20:31
103 lines
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