home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / devtools / dataflex / read.src < prev    next >
Encoding:
Text File  |  1993-05-19  |  12.3 KB  |  369 lines

  1. /GFILE updated 6/4/86 -- MAD
  2.    ────────────────────────────── READ ASCII FILE ───────────────────────────
  3.  
  4.       First you    should select the DataFlex database you    wish to    read data into.
  5.         ________________________________________________
  6.  
  7.  
  8.   NUMBER      DATAFLEX FILENAME              FILE ROOT NAME
  9.   ======    ======================    ======================================== 
  10.    __.        ______________________    ________________________________________
  11.    __.        ______________________    ________________________________________
  12.    __.        ______________________    ________________________________________
  13.    __.        ______________________    ________________________________________
  14.    __.        ______________________    ________________________________________
  15.    __.        ______________________    ________________________________________
  16.    __.        ______________________    ________________________________________
  17.    __.        ______________________    ________________________________________
  18.    __.        ______________________    ________________________________________
  19.    __.        ______________________    ________________________________________
  20.    __.        ______________________    ________________________________________
  21.    __.        ______________________    ________________________________________
  22.  
  23.  
  24.     Please enter the number    of the file to read data into: __.
  25.     (Next-key for more, Previous-key to start over.     Help available)
  26. /FILEHELP HELP
  27. ╔═══════════════════════════════════════════════════════════════════════════╗
  28. ║ -------------------------  File selection help  ------------------------- ║
  29. ║                                        ║
  30. ║ This utility will help you to    build a    program    to read    a standard        ║
  31. ║ ASCII    file into an existing DataFlex data file.                ║
  32. ║                                        ║
  33. ║ In this section you must select the DataFlex file to receive the data.    ║
  34. ║ You must enter the file number corresponding to the file you wish to use. ║
  35. ║                                        ║
  36. ║ If the file you want is not listed, press the    NEXT RECORD key    to see        ║
  37. ║ more files.                                    ║
  38. ║                                        ║
  39. ║ To repeat the    list of    files from the beginning, press    the PREVIOUS RECORD ║
  40. ║ key.                                        ║
  41. ║                                        ║
  42. ║ Press    any key    to return to the file selection    menu.                ║
  43. ╚═══════════════════════════════════════════════════════════════════════════╝
  44. /PARAM
  45.       ────────────────────────── READ ASCII FILE ───────────────────────────
  46.  
  47.     This utility will help you to build a program to read a    standard
  48.         ASCII data file into an existing DataFlex data file.
  49.  
  50.  
  51.       NAME OF THE DATAFLEX DATA    FILE TO    READ DATA INTO:    ________
  52.  
  53.  
  54.  
  55.       Now provide the name of the ASCII    data file to read from:
  56.  
  57.       READ FROM    ASCII FILE: ________________________________________
  58.  
  59.  
  60.  
  61.       The program source file to be generated must be given a name.  
  62.       Enter the    name to    call the source    file.  BE CAREFUL not to call 
  63.       it by the    same name as another program, or that file will    be 
  64.       overwritten.  
  65.  
  66.       PROGRAM FILE NAME: ________________________________________
  67. /FMAT
  68.     ───────────────────────────    READ ASCII FILE    ───────────────────────────
  69.  
  70.      Some ASCII    files have each    element    on a separate line, such that each 
  71.      record is made up of multiple lines.  This    is a LINE-delimited file.
  72.  
  73.      Other files have all of the elements for each record on one line, with
  74.      a comma between each elememt; text    elements have quotes around them.
  75.      This is a COMMA-delimited file.
  76.  
  77.      ENTER AN "L" IF YOUR ASCII    FILE IS    LINE-DELIMITED;
  78.         OTHERWISE, ENTER A "C" FOR COMMA-DELIMITED:    _
  79.  
  80.  
  81.  
  82.      You may select which elements in the input    file will go into which
  83.      DataFlex fields.  Or, you may simply read the ASCII file directly into
  84.      an    identically-defined DataFlex file.
  85.  
  86.      In    order to read directly into an identically-defined DataFlex file, 
  87.      from element to field on a    one-to-one basis, your ASCII file must 
  88.      contain the correct number    of elements.
  89.  
  90.      ARE YOU READING INTO AN IDENTICALLY-DEFINED DATAFLEX FILE?    (Y/N): _
  91. /FMAT2
  92.      ─────────────────────────── READ ASCII FILE ───────────────────────────
  93.  
  94.  
  95.  
  96.  
  97.      Before you    begin selecting    into which DataFlex fields to read the ASCII
  98.     file, you must know    how many fields    are in each record in the ASCII    file.
  99.  
  100.  
  101.  
  102.  
  103.      HOW MANY FIELDS IN    EACH ASCII RECORD? __.
  104.  
  105. /NAMES
  106.             ────── READ ASCII FILE ──────          FILE: __________
  107.  
  108.      FLD# NAME              FLD# NAME            FLD# NAME
  109.      __.  _______________     __.  _______________    __.  _______________
  110.      __.  _______________     __.  _______________    __.  _______________
  111.      __.  _______________     __.  _______________    __.  _______________
  112.      __.  _______________     __.  _______________    __.  _______________
  113.      __.  _______________     __.  _______________    __.  _______________
  114.      __.  _______________     __.  _______________    __.  _______________
  115.      __.  _______________     __.  _______________    __.  _______________
  116.      __.  _______________     __.  _______________    __.  _______________
  117.      __.  _______________     __.  _______________    __.  _______________
  118.      __.  _______________     __.  _______________    __.  _______________
  119.      __.  _______________     __.  _______________    __.  _______________
  120.      __.  _______________     __.  _______________    __.  _______________
  121.      __.  _______________     __.  _______________    __.  _______________
  122.      __.  _______________     __.  _______________    __.  _______________
  123.      __.  _______________     __.  _______________    __.  _______________
  124.  
  125.          FIELD# __.    OF ASCII FILE GOES INTO    DATAFLEX FIELD#    __.
  126.  
  127.     Next-key for more fields          Previous-key to start    fields over
  128.     RETURN to discard the ASCII    field      ESCAPE to exit       {HELP AVAILABLE}
  129. /FIELDHELP    HELP
  130. ───────────────────────────── READ ASCII FILE ─────────────────────────────
  131.  
  132.               Element assignment help 
  133.  
  134. ───────────────────────────────────────────────────────────────────────────
  135.  
  136. In this    section    you must select    where each field in the    input file is to
  137. go in the DataFlex records which are being created.
  138.  
  139. The "FIELD#" prompt refers to the INPUT    data, starting at the first field
  140. (Number    1).  Select the    number of the element in __________ that should    
  141. receive    this data.
  142.  
  143. If the field you want is NOT shown, you    may press the NEXT RECORD key to 
  144. see more fields.  You may restart the field display by pressing    the 
  145. PREVIOUS RECORD    key.
  146.  
  147.  
  148.  
  149. Press any key to return    to the Element Assignment screen.
  150. /GOCOMP
  151. ───────────────────────────────    READ ASCII FILE    ───────────────────────────────
  152.  
  153.  
  154.  
  155.                  Your program
  156.  
  157.  
  158.  
  159.                    is now complete !
  160.  
  161.  
  162.            You may compile it now or edit it first.
  163.  
  164.  
  165.                    Compile ? (Y/N) _
  166. /*
  167. // =========================================================================
  168. //        THIS MODULE    MAY BE DISTRIBUTED WITH    RUNTIME    LICENSES        
  169. // =========================================================================
  170.  
  171.  // declarations, names, initializations
  172.     PAGE SET FILEHELP AT 4 2 COLORS    1 1
  173.            STRING TAGFILE 40 TAGNAME 40 ELEMENT 20 CMPILE 1    FLEXNAME 40 REM    2
  174.            INTEGER FIELD#
  175.            NUMBER LINEC
  176.            INDICATE    FIRST TRUE
  177.            CHARACTER 47 TO REM
  178.            APPEND REM REM
  179.            MOVE 1 TO LINEC
  180.            NAME NAMES.92 LINE
  181.            NAME NAMES.93 ELEMENT#
  182.            DISPLAY 'You must enter one of these numbers to continue.' TO GFILE.1
  183.  
  184.  // get    file names
  185. GETNAME:
  186.            MOVE 0 TO FILENUMBER
  187. NAMELP:           BLANKFORM GFILE.2 THRU GFILE.38
  188.            PAGE GFILE
  189.  
  190.            FOR WINDOWINDEX FROM 0 TO 33
  191. NEXT_ONE:
  192.                FILELIST    NEXT
  193. [FOUND]               BEGIN
  194.              FILELIST PATHNAME TO TAGFILE FLEXNAME
  195.              IF TAGFILE EQ '' GOTO NEXT_ONE    
  196.              MOVE FILENUMBER TO GFILE.2&
  197.              MOVE FLEXNAME TO GFILE.3&
  198.              MOVE TAGFILE TO GFILE.4&
  199.              CALC (WINDOWINDEX + 2)    TO WINDOWINDEX
  200.                END
  201. [FOUND]           LOOP
  202. [NOT FOUND]    MOVE '<<< NO MORE FILES >>>' TO GFILE.3&
  203.  
  204. ACCNAME:
  205.            BLANKFORM GFILE.38
  206.            ACCEPT GFILE.38
  207. [KEY.NEXT][FOUND] GOTO NAMELP
  208. [KEY.NEXT]     GOTO ACCNAME
  209. [KEY.PREVIOUS] GOTO GETNAME
  210.            IF GFILE.38 EQ '' GOTO ACCNAME
  211.            FILELIST    GFILE.38 
  212.            FILELIST    PATHNAME TO TAGFILE PARAM.1
  213.            MOVE PARAM.1 TO FIELDHELP.1
  214.            IF TAGFILE EQ ''    BEGIN
  215.                MOVE GFILE.1 TO GFILE.1    // light up message
  216.                GOTO ACCNAME
  217.            END
  218.  
  219.   // open tags
  220.            INTEGER FLDNUM
  221.            APPEND TAGFILE ".TAG"
  222. OPENTAG:
  223.            INDICATE    ENDTAG FALSE
  224.            DIRECT_INPUT TAGFILE
  225.            MOVE 0 TO FLDNUM
  226. [SEQEOF]       BEGIN
  227.                ERROR 101 "FILE NOT FOUND"
  228.                GOTO ACCNAME
  229.            END
  230. [FIRST]           BEGIN 
  231.                ACCEPT PARAM.2 {CAPSLOCK,REQUIRED}
  232.                ACCEPT PARAM.3 {CAPSLOCK,REQUIRED}
  233.                ACCEPT FMAT.1 {CAPSLOCK,CHECK='L|C'}
  234.                ACCEPT FMAT.2 {CAPSLOCK,CHECK='Y|N'}
  235.                INDICATE    COMMA AS FMAT.1    EQ 'C'
  236.                DIRECT_OUTPUT PARAM.3
  237.                WRITELN '/*'
  238.                WRITELN 'CLEARSCREEN'
  239.                WRITELN
  240.                WRITELN 'STRING TEMSTR'
  241.                WRITELN 'NUMBER RECS '
  242.                WRITELN
  243.                WRITELN 'DIRECT_INPUT "'    PARAM.2    '"'
  244.                WRITELN '[SEQEOF] ERROR 75 "' PARAM.2 '"'
  245.                WRITELN '[SEQEOF] ABORT'
  246.                WRITELN
  247.                WRITELN 'OPEN ' PARAM.1
  248.                WRITELN
  249.                WRITELN 'REPEAT'
  250.                IF FMAT.2 EQ 'Y'    GOTO ONE_TO_ONE    //skip selections
  251.                ACCEPT FMAT2.1             {RANGE=1,255}
  252.         END
  253.  
  254.  
  255.   
  256. // read    tags
  257.         BLANKFORM NAMES
  258.         PAGE NAMES
  259.         MOVE PARAM.1 TO    NAMES.1
  260.         INDICATE FIRST FALSE
  261. DISTAG:
  262.         BLANKFORM NAMES.2 THRU NAMES.91
  263.         FOR WINDOWINDEX    FROM 0 TO 89
  264. XTAG:               READLN TAGNAME 
  265. [SEQEOF]           INDICATE    ENDTAG TRUE
  266. [NOT SEQEOF]           BEGIN
  267.                 IF TAGNAME LT 'A' GOTO XTAG    // bypass "@" fields
  268.                 INCREMENT FLDNUM
  269.                 MOVE FLDNUM    TO NAMES.2&
  270.                 MOVE TAGNAME TO NAMES.3&
  271.                 INCREMENT WINDOWINDEX
  272.                END
  273. [NOT SEQEOF]    LOOP
  274.  
  275.  // get    line
  276.         REPEAT 
  277.            MOVE    LINEC TO LINE
  278.            REPEAT 
  279. ACCELEM:          CLEARFORM    ELEMENT#    
  280.               ACCEPT ELEMENT#    {RANGE=0,255}
  281. [KEY.NEXT][ENDTAG]    GOTO ACCELEM
  282. [KEY.NEXT]          GOTO DISTAG
  283. [KEY.PREVIOUS]          GOTO OPENTAG
  284.               INDICATE BLANK AS    ELEMENT# EQ 0 
  285. [BLANK][NOT COMMA]    WRITELN '       READLN TEMSTR'
  286. [BLANK][COMMA]          WRITELN '       READ    TEMSTR'
  287. [BLANK]              GOTO ENDLOOP2
  288.               MOVE 0 TO    WINDOWINDEX
  289.               FOR WINDOWINDEX FROM 0 TO    89
  290.              INDICATE LASTIF FALSE 
  291.              IF NAMES.2& EQ    ELEMENT# BEGIN
  292.                 CLEARFORM NAMES.2&
  293.                 MOVE NAMES.3& TO ELEMENT
  294. [COMMA]                WRITELN '     READ '    PARAM.1    '.' ELEMENT
  295. [NOT COMMA]            WRITELN '     READLN    ' PARAM.1 '.' ELEMENT
  296.                 INCREMENT WINDOWINDEX
  297.                 INDICATE LASTIF TRUE
  298.                 GOTO ENDLOOP
  299.              END
  300.              INCREMENT WINDOWINDEX
  301.               LOOP
  302.            LOOP
  303. ENDLOOP:
  304. [NOT LASTIF]       CLEARFORM ELEMENT#
  305. ENDLOOP2:       CALC    (LINEC+1) TO LINEC
  306.         UNTIL LINEC GT FMAT2.1    
  307.         GOTO FINISH
  308.  
  309. ONE_TO_ONE:    //direct transfer to identically-defined file
  310.         INDICATE FIRST FALSE
  311.         REPEAT
  312.             READLN TAGNAME
  313. [COMMA][NOT SEQEOF]    WRITELN    '    READ ' PARAM.1 '.'    TAGNAME
  314. [NOT COMMA][NOT    SEQEOF]    WRITELN    '    READLN ' PARAM.1 '.' TAGNAME
  315.         UNTIL [SEQEOF]
  316.  
  317. KEYPROC    KEY.ESCAPE
  318. FINISH:        CLEARSCREEN
  319. [FIRST]        ABORT
  320. [COMMA]        WRITELN    '    READLN'
  321.         WRITELN
  322.         WRITELN    '    [NOT SEQEOF] BEGIN'
  323.         WRITELN    '    SAVERECORD ' PARAM.1
  324.         WRITELN    '    CLEAR '    PARAM.1
  325.         WRITELN    '    SHOW "*"'
  326.         WRITELN    '    CALC (RECS + 1)    TO RECS'
  327.         WRITELN    '    END'
  328.         WRITELN
  329.         WRITELN    '    KEYCHECK BEGIN ' REM ' If a key has been pressed'
  330.         WRITELN    '    SHOWLN ' REM ' see if the operator wants to quit'
  331.         WRITELN    '    SHOWLN "A KEY HAS BEEN PRESSED WITH " RECS " RECORDS SAVED"'
  332.         WRITELN    '    SHOW "PRESS ANY    KEY TO CONTINUE, ESCAPE    TO CANCEL"'
  333.         WRITELN    '    INKEY TEMSTR'
  334.         WRITELN    '    [KEY.ESCAPE] ABORT'
  335.         WRITELN    '    END'            
  336.         WRITELN    'UNTIL [SEQEOF]'
  337.         WRITELN
  338.         WRITELN    REM ' Every record has been loaded '
  339.         WRITELN    'SHOWLN    '
  340.         WRITELN    'SHOWLN    RECS " RECORDS HAVE BEEN ADDED TO ' PARAM.1 '"'
  341.         WRITELN    'SHOW "PRESS ANY KEY TO    CONTINUE "'
  342.         WRITELN    'INKEY TEMSTR'
  343.         WRITELN    'ABORT'
  344. [KEY.ESCAPE]    ABORT
  345.  
  346.  //  give operator option to compile generated code
  347.         PAGE GOCOMP
  348.         INTEGER    TMP
  349.         LENGTH PARAM.3 TO TMP
  350.         GOTOXY 6 ((79-TMP) / 2)
  351.         SHOW PARAM.3
  352.         DISPLAY    'Y' TO GOCOMP.1
  353.         ACCEPT GOCOMP.1    {CAPSLOCK,CHECK='YN'}        
  354.         IF GOCOMP.1 MATCH 'Y' RUNPROGRAM 'DFCOMP' PARAM.3
  355.         ABORT
  356.  
  357.   //  define action of function    keys
  358.  
  359. KEYPROC    KEY.FIELD
  360. [FIRST]        BACKFIELD
  361.         RETURN
  362.  
  363. KEYPROC    KEY.HELP
  364.         HELP
  365.         ENTAGAIN
  366.         RETURN
  367.  
  368.  
  369.