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 files

This 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
x,y
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.

FILEMAKE.BAS

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.  

 

Valid HTML 4.01 Transitional
Yahoo! Search
Search the web Search this site
Valid CSS