|
25 Years of Programming
An open source source for C, C++, OWL, BASIC, MDB, XLS, DOT, and more... |
Home Projects Up Sitemap Search Blog Forum+Chat About Us Privacy Terms of Use Feedback FAQ Images Services Payments Humor Music |
Heathkit H-89 MBASIC program to create or separate numeric ordered pairs in data filesThis program provides several useful data file manipulation utilities. Its original purpose was to create files for use by the GRAPH.BAS program. It can be used on any files that contain only numeric entries. Option 1 allows you to open a data file and enter into that file all the values for a single variable. Use this routine if you have two or more files to make and want to input all the values of one variable and then all the values of the second. Option 2 allows entry of multiple variables at one time. Use this option if you have records arranged as: x,y and want to input the first x value, then the first y value, and so on. The variables are stored in separate files; in this case it would be one file for variable x and one for variable y. Option 3 takes a file specified by you and creates from it a file containing evenly-spaced numbers whose only purpose is to provide the GRAPH program a second variable to use for graphing a second axis. That is, if you have a file containing data for 12 months of a year, in order to graph that data it will be necessary to run 'FILEMAKE' and create a file with (for example) the numbers 1 through 12. These will be used to graph the 12 months of data against. Option 4 will split a (user-specified) file that contains two or more variables in a regular pattern into two or more separate files. Each file will contain all the values for one of the variables in the original file. Thus, if you have a file with a regular, repeating structure of "x,y,z,x,y,z,x,y,z...", you can use option 4 to create 3 files, one for all the x values, one for all the y values, and one for all the z. These routines should allow you to use GRAPH.BAS to graph data from just about any data files, or to manipulate files in a useful fashion for other purposes. |
10 REM 'FILEMAKE.BAS' 11 'Copyright (C)1982 Steven Whitney. 12 'Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY. 13 'Initially published by http://25yearsofprogramming.com. 20 CLEAR 30 DEFINT I,J,N,P 40 REM 50 ON ERROR GOTO 1350 60 PRINT CHR$(27)"E" 70 Q$=STRING$(75,"=") 80 PRINT Q$:PRINT:PRINT,"*** FILE CREATION MENU ***":PRINT 90 PRINT,"0 = STOP PROGRAM":PRINT 100 PRINT,"1 = INPUT ALL THE VALUES FOR A SINGLE FILE AT A TIME":PRINT 110 PRINT,"2 = INPUT MULTIPLE VARIABLES AT ONE TIME" 120 PRINT," (BUT THE NUMBERS ARE PUT INTO SEPARATE FILES.)":PRINT 130 PRINT,"3 = TAKE AN ALREADY EXISTING FILE AND CREATE AS ITS COMPANION" 140 PRINT," A FILE THAT CONTAINS EVENLY SPACED NUMBERS WHOSE ONLY PURPOSE" 150 PRINT," WILL BE TO CREATE A SECOND AXIS FOR GRAPHING PURPOSES.":PRINT 160 PRINT,"4 = SPLIT APART A FILE (CONTAINING MULTIPLE VARIABLES)" 170 PRINT," INTO TWO OR MORE FILES, EACH CONTAINING ALL THE VALUES" 180 PRINT," OF ONE OF THE VARIABLES.":PRINT:PRINT 190 PRINT "WHICH WOULD YOU LIKE TO DO (0,1,2,3,4)?";:Z$=INPUT$(1):PRINT Z$:Z=VAL(Z$):IF Z<0 OR Z>4 THEN 190 200 IF Z$="0" THEN END 210 ON Z GOTO 220,370,750,930 220 REM INPUT ALL X THEN ALL Y 230 PRINT Q$:PRINT 240 INPUT "CREATE WHAT FILE NAME (INCLUDING OPTIONAL EXTENSION)";A$ 250 OPEN "O",1,A$ 260 P=P+1 : IF P MOD 15=1 THEN PRINT,,"==> ENTER THE LETTER 'E' TO STOP INPUT." 270 INPUT "NEXT ENTRY";B$ : B=VAL(B$) 280 IF B$="E" THEN 310 290 WRITE #1,B 300 GOTO 260 310 CLOSE 320 PRINT:PRINT "YOU HAVE JUST CREATED ";A$ 330 PRINT 340 PRINT "DO YOU WANT TO CREATE ANOTHER FILE (Y/N)?";:Z$=INPUT$(1) 350 IF Z$<>"Y" AND Z$<>"N" THEN 340 360 IF Z$="Y" THEN 230 ELSE 10 370 REM INPUT COMPLETE (X,Y) PAIRS 380 PRINT Q$:PRINT 390 PRINT "HOW MANY VARIABLES DO YOU WANT TO INPUT AT ONCE?";" THAT IS, " 400 INPUT "HOW MANY FILES DO YOU WANT TO MAKE SIMULTANEOUSLY";N 410 IF N=0 THEN 10 420 IF N>15 THEN PRINT "MAXIMUM IS 15":GOTO 400 430 PRINT 440 IF N=1 THEN PRINT Q$:PRINT "PLEASE USE OPTION #1 OF THE MENU.":PRINT "PRESS ANY KEY TO ACKNOWLEDGE AND CONTINUE":Z$=INPUT$(1) : GOTO 10 450 IF N<=3 THEN 570 460 PRINT Q$:PRINT"THERE MAY BE A MINOR PROBLEM HERE. IN ORDER TO ACCESS MORE THAN THREE FILES,":PRINT"YOU MUST EXIT THIS PROGRAM, RETURN TO CP/M, AND THEN RETURN TO MBASIC" 470 PRINT"USING THE COMMAND 'MBASIC FILEMAKE /F:X', WHERE F IS THE CAPITAL LETTER 'F'," 480 PRINT "BUT X IS THE NUMBER OF FILES YOU NEED TO ACCESS AT ONCE (THE NUMBER OF ":PRINT "VARIABLES YOU WANT TO ENTER.)":PRINT"THE ABSOLUTE MAXIMUM IS 15." 490 PRINT 500 PRINT "HAVE YOU DONE THIS ALREADY (Y/N)?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 500 510 IF Z$="Y" THEN 570 520 PRINT "DO YOU WANT TO DO THIS NOW (Y/N)?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 520 530 IF Z$="N" THEN GOTO 10 540 PRINT 550 PRINT "SHOULD I EXIT TO CP/M FOR YOU (Y/N)?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 550 560 IF Z$="Y" THEN SYSTEM ELSE END 570 FOR I=1 TO N 580 PRINT "OPEN WHAT FILE FOR VARIABLE #";I;:INPUT A$(I) 590 OPEN "O",I,A$(I) 600 NEXT I 610 PRINT 620 FOR J=1 TO 10000 630 P=P+1 : IF P>15 THEN P=0:PRINT:PRINT,"==> TO END, ENTER THE LETTER 'E' FOR THE VALUE OF VARIABLE #1." 640 PRINT CHR$(7) 650 FOR I=1 TO N 660 PRINT "NEXT ENTRY FOR VARIABLE #";I; 670 P=P+1 680 INPUT B$:B=VAL(B$) 690 IF B$="E" THEN 730 700 WRITE #(I),B 710 NEXT I 720 NEXT J 730 CLOSE 740 GOTO 10 750 REM CREATE COMPANION INTEGER FILE 760 PRINT Q$:PRINT 770 PRINT "THE 'COMPANION' FILE WILL CONTAIN VALUES THAT WILL BE USED FOR GRAPHING THE":PRINT "VALUES CONTAINED IN ANOTHER FILE.":PRINT 780 INPUT "AT WHAT NUMBER SHOULD I START THE VALUES";T 790 PRINT 800 INPUT "BY HOW MUCH SHOULD I INCREMENT THIS NUMBER FOR EACH VALUE";U 810 PRINT Q$:PRINT 820 INPUT "WHICH FILE (ALREADY) CONTAINS NUMBERS";A$ 830 OPEN "I",1,A$ 840 INPUT "WHAT SHOULD I CALL THE FILE THAT I CREATE";B$ 850 OPEN "O",2,B$ 860 WHILE NOT EOF(1) 870 INPUT #1,A 880 WRITE #2,T 890 T=T+U 900 WEND 910 CLOSE 920 GOTO 10 930 REM SPLIT APART A FILE 940 PRINT Q$:PRINT 950 INPUT "WHAT IS THE NAME OF THE FILE TO SPLIT APART";A$ 960 OPEN "I",1,A$ 970 PRINT:PRINT "EACH FILE HAS A REGULAR, REPETITIVE STRUCTURE -- THAT IS," 980 PRINT"IT MAY HAVE, FOR EXAMPLE, REPETITIVE ENTRIES OF A STOCK'S" 990 PRINT"CLOSING PRICE, VOLUME, AND CHANGE. THIS WOULD MAKE THE FILE STRUCTURE,OR LOGIC:":PRINT 1000 FOR I=1 TO 3 : PRINT,"PRICE, VOLUME, CHANGE" : NEXT I 1010 PRINT,,"ETC." 1020 PRINT "EVEN THOUGH THE PRINTED FILE MIGHT LOOK DIFFERENT, SUCH AS:" 1030 FOR I=1 TO 3 : PRINT "PRICE":PRINT"VOLUME":PRINT"CHANGE":NEXT I 1040 PRINT" ETC." 1050 PRINT 1060 PRINT"FOR THE PURPOSES OF THIS PROGRAM, THE FILE IN QUESTION CONTAINS 3 VARIABLES.":PRINT 1070 INPUT "HOW MANY VARIABLES DOES YOUR FILE CONTAIN (MINIMUM 2)";N 1080 IF N>14 THEN PRINT "14 VARIABLES MAXIMUM":GOTO 1070 1090 IF N<2 THEN PRINT "THIS FILE CANNOT BE SPLIT!":GOTO 10 1100 IF N=2 THEN 1220 1110 PRINT Q$:PRINT"THERE MAY BE A MINOR PROBLEM HERE. IN ORDER TO SPLIT A FILE OF MORE THAN 2 ":PRINT "VARIABLES, YOU MUST EXIT THIS PROGRAM, RETURN TO CP/M, AND RETURN" 1120 PRINT "TO MBASIC USING THE COMMAND 'MBASIC FILEMAKE /F:X', WHERE F IS THE LETTER 'F',":PRINT "BUT "; 1130 PRINT "X IS THE NUMBER OF FILES YOU NEED TO HAVE OPEN AT ONE TIME (THAT IS,":PRINT "THE NUMBER OF VARIABLES THAT YOU NEED THIS PROGRAM TO SPLIT APART)+1." 1140 PRINT "YOU MUST ADD ONE (1) TO THE NUMBER OF VARIABLES YOU WANT TO SPLIT.":PRINT"THAT IS, IF YOU WANT TO SPLIT 3 VARIABLES, ASK FOR 4 FILES TO ALLOW ONE FILE FOR":PRINT "THE SOURCE FILE. THE ABSOLUTE MAXIMUM NUMBER OF FILES IS 15, OF VARIABLES, 14." 1150 PRINT 1160 PRINT "HAVE YOU DONE THIS ALREADY (Y/N)?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 1160 1170 IF Z$="Y" THEN 1220 1180 PRINT "DO YOU WANT TO DO THIS NOW?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 1180 1190 IF Z$="N" THEN CLOSE : GOTO 10 1200 PRINT "SHOULD I EXIT TO CP/M FOR YOU?";:Z$=INPUT$(1):PRINT Z$:IF Z$<>"Y" AND Z$<>"N" THEN 1200 1210 IF Z$="Y" THEN CLOSE:SYSTEM ELSE CLOSE:END 1220 FOR I=1 TO N 1230 PRINT "WHAT NAME FOR THE FILE I CREATE FOR VARIABLE #";I; 1240 INPUT A$(I) 1250 OPEN "O",I+1,A$(I) 1260 NEXT I 1270 WHILE NOT EOF(1) 1280 FOR I=1 TO N 1290 INPUT #1,B 1300 WRITE #(I+1),B 1310 NEXT I 1320 WEND 1330 CLOSE 1340 GOTO 10 1350 REM ON ERROR ROUTINE 1360 IF ERR<>64 THEN 1430 1370 PRINT Q$:PRINT "A FILE NAME CAN ONLY CONSIST OF UP TO EIGHT CAPITAL LETTERS" 1380 PRINT "OPTIONALLY FOLLOWED BY A PERIOD AND UP TO THREE MORE CAPITAL LETTERS.": PRINT"FOR EXAMPLE, 'XXXXXXXX.XXX' WOULD BE A VALID FILE NAME. PLEASE ENTER AGAIN.":PRINT Q$ 1390 IF ERL=250 THEN RESUME 240 1400 IF ERL=590 THEN RESUME 580 1410 IF ERL=850 THEN RESUME 840 1420 IF ERL=1250 THEN RESUME 1230 1430 IF ERR<>53 THEN GOTO 1460 ELSE PRINT Q$:PRINT "ONLY THESE FILES ARE AVAILABLE:":FILES:PRINT Q$:PRINT 1440 IF ERL=830 THEN RESUME 820 1450 IF ERL=960 THEN RESUME 950 1460 IF ERR<>61 THEN GOTO 1490 ELSE PRINT "THE DISK IS FULL TO CAPACITY. I WILL AUTOMATICALLY CLOSE ALL FILES NOW,":PRINT "AND END THE PROGRAM. THERE IS SOME RISK OF DATA LOSS. PLEASE" 1470 PRINT "EITHER CHECK THE FILES FOR ACCURACY OR RE-RUN THE PROGRAM ON A DISK" 1480 PRINT "WITH MORE AVAILABLE SPACE.":CLOSE:END 1490 ON ERROR GOTO 0 1500 END 1510 REM COPYRIGHT (C)1982 STEVEN WHITNEY.
|
|
|
|
|
|
Copyright ©2012 Steven Whitney. Last modified Sun 07/29/2012 11:41:28 -0700. |
||