home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug076.arc / DATA-MP2.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  9KB  |  245 lines

  1. 10 '        Converts ASCII file to SYLK format for MULTIPLAN
  2. 20 '                   by Cam McDonald, Brisbane
  3. 30 '  with whistles and bells for Microbee by John Buckerfield - MUGSA
  4. 40 '
  5. 50 ' FLD$=fieldname, SC=start column, NC=no. columns(width), TOTC=total columns
  6. 60 ' AN$=alphabetic/numeric, NF=no. fields(variables), NR=no. records(cases)
  7. 70 ' FIN$=input filename, FOUT$=output filenmae, FNFF$=string from STR$(X)
  8. 80 '
  9. 120 E$=CHR$(27)     ' escape character
  10. 130 CLS$=CHR$(26)   ' clears screen
  11. 140 RON$=E$+")"     ' inverse video on
  12. 150 ROF$=E$+"("     ' inverse video off
  13. 160 '
  14. 170 PRINT CLS$; TAB(32); "v1.0j              31/05/87" : PRINT
  15. 180 PRINT TAB(10); RON$; " Converts ASCII file to SYLK format for MULTIPLAN " ; ROF$ : PRINT : PRINT : PRINT
  16. 190 PRINT TAB(18);"  Do you want instructions  (Y/N) ? "
  17. 200 INS$=INPUT$(1) 
  18. 210 IF INS$="Y" OR INS$="y" GOTO 2280
  19. 220 '
  20. 222 ON ERROR GOTO 2370
  21. 224 OPTION BASE 1
  22. 226 COL=1 : ROW=1
  23. 230 IL=0
  24. 240 DEFINT I-N,S,W
  25. 250 DIM FLD$(150),SC(150),NC(150),BB(150),W(150),AN$(150) 'maximum 150 fields/records
  26. 260 DEF FNFF$(X)=MID$(STR$(X),2)
  27. 270 C$="C;X"
  28. 280 R1$="C;Y"  :  R2$=";X1;K"
  29. 290 PRINT : PRINT : PRINT
  30. 300 GOSUB 1680
  31. 310 PRINT CLS$
  32. 320 PRINT "For each field  ENTER ";RON$;" FIELDNAME, START COLUMN, NO. COLUMNS, TYPE (alpha/numeric) ";ROF$ : PRINT
  33. 330 GOSUB 1810
  34. 340 PRINT CLS$
  35. 350 PRINT "  DATA WILL BE ADDED INTO ROW ";RON$;ROW;ROF$;" COLUMN ";RON$;COL;ROF$;" OF SPREADSHEET"
  36. 360 PRINT 
  37. 370 PRINT "      DO YOU WISH TO CHANGE THIS (Y/N) ? ";
  38. 380 COL$=INPUT$(1)
  39. 390 PRINT : IF COL$="N" OR COL$="n" GOTO 410
  40. 400 GOSUB 2020
  41. 410 GOSUB 1890
  42. 420 GOSUB 1960
  43. 430 '
  44. 440 '               *********** edit entries ************
  45. 450 PRINT CLS$
  46. 460 PRINT "      YOU HAVE ENTERED THE FOLLOWING, ";RON$;" PLEASE CHECK CAREFULLY " : PRINT
  47. 470 PRINT "  ****  TO CORRECT ERRORS,  ENTER NO. OF ITEM FOR CORRECTION  ****  ";
  48. 480 PRINT ROF$ : PRINT
  49. 490 PRINT TAB(4);"ITEM";TAB(10);"FIELD";TAB(21);"ITEM DESCRIPTION"
  50. 500 PRINT TAB(4);"----";TAB(10);"-----";TAB(21);"----------------"
  51. 510 PRINT
  52. 520 IC=1
  53. 530 PRINT TAB(5);IC;TAB(17);"NO. OF FIELDS (variables) = ";NF
  54. 540 PRINT TAB(5);IC;TAB(17);"NO. OF RECORDS (cases)    = ";NR
  55. 550 IC=IC+1 : PRINT
  56. 560 PRINT TAB(17);"NAME";TAB(32);"START COL.";TAB(47);"NO.COLS.";TAB(57);"a/n"
  57. 570 FOR I=1 TO NF
  58. 580  PRINT TAB(5);IC;TAB(10);I;TAB(17);FLD$(I);TAB(35);SC(I);TAB(50);NC(I);
  59. 590  PRINT TAB(58);AN$(I)
  60. 600  IF I<10 GOTO 660      'displays 10 records
  61. 610  IF IL>0 GOTO 660
  62. 620  IL=1
  63. 630  PRINT RON$
  64. 640  PRINT" NOTE ITEM NOS. FOR CORRECTION ";ROF$;"    PRESS ANY KEY TO CONTINUE";
  65. 650  DD$=INPUT$(1)
  66. 660 NEXT I
  67. 670 IC=IC+1 : PRINT
  68. 680 PRINT TAB(5);IC;TAB(17);"INPUT  FILENAME = ";FIN$
  69. 690 IC=IC+1
  70. 700 PRINT TAB(5);IC;TAB(17);"OUTPUT FILENAME = ";FOUT$ : PRINT
  71. 710 IC=IC+1
  72. 720 PRINT TAB(5);IC;TAB(17);"1ST ROW  OF  SPREADSHEET  = ";ROW
  73. 730 PRINT TAB(5);IC;TAB(17);"1ST COLUMN OF SPREADSHEET = ";COL : PRINT
  74. 740 IC=IC+1
  75. 750 PRINT RON$;TAB(6);IC;TAB(17);"** NO CORRECTIONS **      ";ROF$ : PRINT
  76. 760 PRINT : PRINT "  ****  TO CORRECT ERRORS,  ENTER NO. OF ITEM FOR CORRECTION  ****  ";
  77. 770 CJ$=INPUT$(1)
  78. 780 J=VAL(CJ$)
  79. 790 ON J GOSUB 1540,2180,1910,1950,2010,810
  80. 800 GOTO 450
  81. 810 PRINT
  82. 820 PRINT CLS$ : PRINT RON$;  " CHECK CORRECT DATA DISK IS INSERTED ";ROF$;
  83. 830 PRINT "     STRIKE ANY KEY TO CONTINUE ";
  84. 840 DD$=INPUT$(1)
  85. 850 OPEN "I",#1,FIN$
  86. 860 OPEN "O",#2,FOUT$
  87. 870 PRINT CLS$;  "   **********  JOB RUNNING   **********" : PRINT
  88. 880 REM              -- SET UP ID RECORD --
  89. 890 D$=MID$(FIN$,2,1)
  90. 900 IF D$=":" THEN 930
  91. 910 ID$=FIN$
  92. 920 GOTO 940
  93. 930 ID$=MID$(FIN$,3)
  94. 940 ID$="ID;"+ID$
  95. 950 PRINT#2,ID$
  96. 960 REM              -- SET UP FIELD WIDTH RECORDS --
  97. 970 FOR I=1 TO NF
  98. 980  W(I)=NC(I)+2
  99. 990  W$=FNFF$(W(I))
  100. 1000  I$=FNFF$(I+COL-1)
  101. 1010  FW$="F;W"+I$+" "+I$+" "+W$
  102. 1020  PRINT#2,FW$
  103. 1030 NEXT I
  104. 1040 REM             -- SET UP FORMAT RECORDS (RIGHT, LEFT OR CENTRE) --
  105. 1050 H1$="F;DG0R10"
  106. 1060 PRINT#2,H1$
  107. 1070 MR$=FNFF$(ROW)
  108. 1080 PRINT#2,"F;FD0C;R"+MR$
  109. 1090 REM             -- SET UP SIZE (Y x X) RECORD --
  110. 1100 NF$=FNFF$(NF)    ' no fields = value of X
  111. 1110 NR$=FNFF$(NR+1)    ' no records = value of Y
  112. 1120 H2$="B;Y"+NR$+";X"+NF$
  113. 1130 PRINT#2,H2$
  114. 1140 REM             -- SET UP FIELDNAME RECORDS --
  115. 1150 M$=FNFF$(COL)
  116. 1160 PRINT#2,"C;Y"+MR$+";X"+M$+";K"+CHR$(34)+FLD$(1)+CHR$(34)
  117. 1170 FOR J=2 TO NF
  118. 1180  J$=FNFF$(J+COL-1)
  119. 1190  PRINT#2,"C;X"+J$+";K"+CHR$(34)+FLD$(J)+CHR$(34)
  120. 1200 NEXT J
  121. 1210 REM             -- START CREATING DATA RECORDS --
  122. 1220 FOR L=2 TO NR+1
  123. 1230  IF EOF(1) THEN 1460
  124. 1240  LINE INPUT#1,A$
  125. 1250  L$=FNFF$(L+ROW-1)
  126. 1260  FOR I=1 TO NF
  127. 1270   J=SC(I)
  128. 1280   K=NC(I)
  129. 1290   B$=MID$(A$,J,K)
  130. 1300   I$=FNFF$(I+COL-1)
  131. 1310   IF I=1 THEN 1370
  132. 1320   IF AN$(I)="N" OR AN$(I)="n" GOTO 1350
  133. 1330   O$=C$+I$+";K"+CHR$(34)+B$+CHR$(34)
  134. 1340   GOTO 1410
  135. 1350   O$=C$+I$+";K"+B$
  136. 1360   GOTO 1410
  137. 1370   IF AN$(I)="N" OR AN$(I)="n" GOTO 1400
  138. 1380   O$=R1$+L$+";X"+I$+";K"+CHR$(34)+B$+CHR$(34)
  139. 1390   GOTO 1410
  140. 1400   O$=R1$+L$+";X"+I$+";K"+B$
  141. 1410   PRINT#2,O$
  142. 1420  NEXT I
  143. 1430  REC=L-1 : PRINT "   ROW (record)  ";REC;"  CONVERTED"
  144. 1440 NEXT L
  145. 1450 RR$=FNFF$(ROW)
  146. 1460 PRINT#2,"W;N1;A"+RR$+" "+M$
  147. 1470 PRINT#2,"E"
  148. 1480 CLOSE#1 : CLOSE#2
  149. 1490 PRINT CHR$(7); CHR$(7) : PRINT "   **********  JOB FINISHED  **********"
  150. 1500 END
  151. 1510 '
  152. 1520 '
  153. 1530 REM             +++  SUBROUTINE CALLED FROM 790  +++
  154. 1540 PRINT CLS$ : PRINT : PRINT
  155. 1550 PRINT TAB(15);"NO. OF FIELDS (variables) = ";NF
  156. 1560 PRINT TAB(15);"NO. OF RECORDS (cases)    = ";NR
  157. 1570 PRINT : PRINT : PRINT
  158. 1580 PRINT CHR$(7); RON$; " If changing NO. OF FIELDS, dont forget to change FIELDNAMES etc. (Item 2) "; ROF$;
  159. 1590 PRINT : PRINT
  160. 1600 INPUT "  ENTER  NO. OF FIELDS (variables) ";NF
  161. 1610 INPUT "  ENTER  NO. OF RECORDS (cases)    ";NR
  162. 1620 PRINT
  163. 1630 PRINT RON$; "  Do you now wish to edit FIELDS  (Y/N) ? "; ROF$;
  164. 1640 EDI$=INPUT$(1)
  165. 1650 PRINT : IF EDI$="Y" OR EDI$="y" GOTO 2070 ELSE RETURN
  166. 1660 '
  167. 1670 REM             +++  SUBROUTINE CALLED FROM 300  +++
  168. 1680 INPUT "  ENTER  NO. OF FIELDS (variables) ";NF
  169. 1690 INPUT "  ENTER  NO. OF RECORDS (cases)    ";NR
  170. 1700 IF NR>150 OR NF>150 GOTO 1710 ELSE 1730   'input up to 150 fields/records
  171. 1710 PRINT : PRINT CHR$(7);RON$;" maximum of 150 fields/records ";ROF$;
  172. 1720 PRINT "    DIM statement in line 250 to modify" : PRINT : GOTO 1680
  173. 1730 PRINT : INPUT "  TOTAL NO. OF COLUMNS  ";TOTC
  174. 1740 IF TOTC>255 THEN 1750 ELSE 1770
  175. 1750 PRINT CHR$(7) : PRINT TAB(3);RON$;" MAXIMUM 255 COLUMNS ONLY ";ROF$ : PRINT
  176. 1760 GOTO 1730
  177. 1770 PRINT
  178. 1780 RETURN
  179. 1790 '
  180. 1800 REM             +++  SUBROUTINE CALLED FROM 330  +++
  181. 1810 FOR I=1 TO NF
  182. 1820  PRINT"  FIELD  ";I;
  183. 1830  INPUT FLD$(I),SC(I),NC(I),AN$(I)
  184. 1840 NEXT I
  185. 1850 PRINT
  186. 1860 RETURN
  187. 1870 '
  188. 1880 REM            +++  SUBROUTINE CALLED FROM 410 OR 790  +++
  189. 1890 PRINT CLS$ : PRINT
  190. 1900 PRINT RON$; " Directory of disk B: "; ROF$ : PRINT : FILES "b:*.*" 
  191. 1910 PRINT : PRINT : PRINT : INPUT "ENTER  FILENAME FOR INPUT  ";FIN$
  192. 1920 PRINT
  193. 1930 RETURN
  194. 1940 '
  195. 1950 REM            +++  SUBROUTINE CALLED FROM 420 OR 790  +++
  196. 1960 INPUT "ENTER  FILENAME FOR OUTPUT ";FOUT$
  197. 1970 PRINT
  198. 1980 RETURN
  199. 1990 '
  200. 2000 REM            +++  SUBROUTINE CALLED FROM 400 OR 790  +++
  201. 2010 PRINT : PRINT
  202. 2020 INPUT "  ENTER  ROW, COLUMN NO. ";ROW,COL
  203. 2030 PRINT
  204. 2040 RETURN
  205. 2050 '
  206. 2060 REM            +++  ROUTINE CALLED FROM 1650  +++
  207. 2070 PRINT : IC=2
  208. 2080 PRINT TAB(10);"FIELD";TAB(17);"NAME";TAB(32);"START COL.";TAB(47);"NO.COLS.";TAB(57);"a/n" : PRINT
  209. 2090 FOR I=1 TO NF
  210. 2100  PRINT TAB(10);I;TAB(17);FLD$(I);TAB(35);SC(I);TAB(50);NC(I);TAB(58);AN$(I)
  211. 2110  IF I<10 GOTO 2160
  212. 2120  IF IL>0 GOTO 2160
  213. 2130  IL=1
  214. 2140 PRINT RON$;" NOTE ITEM NOS. FOR CORRECTION ";ROF$;"    PRESS ANY KEY TO CONTINUE";
  215. 2150  DD$=INPUT$(1)
  216. 2160 NEXT I
  217. 2170 REM            +++  SUBROUTINE CALLED FROM 790  +++
  218. 2180 PRINT : PRINT
  219. 2190 INPUT "  ENTER  FIELD NO. TO CORRECT ";IX
  220. 2200 PRINT : PRINT "For field ";RON$;IX;ROF$;" ENTER "
  221. 2210 PRINT RON$;" FIELDNAME, START COLUMN, NO. COLUMNS, TYPE (a/n) ";ROF$;
  222. 2220 INPUT FLD$(IX),SC(IX),NC(IX),AN$(IX)
  223. 2230 PRINT
  224. 2240 PRINT "  ANY MORE FIELD CORRECTIONS (Y/N) ?"
  225. 2250 X$=INPUT$(1)
  226. 2260 IF X$="Y" OR X$="y" GOTO 2190
  227. 2270 RETURN
  228. 2280 PRINT CLS$; TAB(10); RON$; " Converts ASCII file to SYLK format for MULTIPLAN " ; ROF$ : PRINT : PRINT
  229. 2290 PRINT TAB(8); "This program converts an ASCII data file so that it can be read " : PRINT
  230. 2300 PRINT TAB(22); "by the Multiplan Symbolic (SYLK) mode." : PRINT : PRINT : PRINT
  231. 2310 PRINT "No need for delimiters (,) between data records but must specify column numbers ";
  232. 2320 PRINT " for start of record (START COLUMN, SC), and record length (NO. COLUMNS, NC).  " : PRINT : PRINT
  233. 2330 PRINT "Column headings are added to data file as (FIELDNAME, FLD$), & unless otherwise  specified, these will be placed in row 1.   FIELDS (columns), RECORDS (rows)." : PRINT
  234. 2340 GOTO 220
  235. 2350 '
  236. 2360 REM            +++  ERROR TRAPPING ROUTINE  +++
  237. 2370 IF ERR=53 AND ERL=850 THEN GOTO 2380 OR IF ERR=62 THEN GOTO 1490 ELSE 860
  238. 2380 PRINT CHR$(7); CLS$ : PRINT
  239. 2390 PRINT TAB(17);"INPUT  FILENAME = ";FIN$
  240. 2400 PRINT TAB(17);"OUTPUT FILENAME = ";FOUT$ : PRINT
  241. 2410 PRINT TAB(10);RON$;"    ***     Input file ";ROF$;FIN$;RON$;" not found     ***    ";ROF$ : PRINT
  242. 2420 PRINT : PRINT
  243. 2430 GOSUB 1900
  244. 2440 RESUME 450
  245. *     Input file ";ROF$;FIN$;RON$;" not found     ***