home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / batutl / bed11.arc / BED.DOC < prev    next >
Text File  |  1985-12-03  |  26KB  |  555 lines

  1.      BED - Batch EDitor VERSION 1.1
  2.  
  3.      A data reformatting utility
  4.  
  5.      (c) 1985 by Ken Goosens
  6.  
  7.      Notice:  this program is distributed free.  You are free to use and
  8.      distribute it provided:
  9.  
  10.           (1) no fee or other consideration is charged.
  11.  
  12.           (2) the program is distributed only in unmodified form.
  13.  
  14.           (3) you accept all responsibility for using this program.  The
  15.           author does not provide any guarantee that this program works
  16.           properly and assumes no liability for use of it.
  17.  
  18.      This program is supported by its author.  Please send any comments or
  19.      enhancements to:
  20.  
  21.                      Ken Goosens
  22.                      5020 Portsmouth Road
  23.                      Fairfax, VA 22032
  24.  
  25.      Or call Ken's bulletin board system at 202-537-7407 to leave a message
  26.      or download the latest version.
  27.  
  28.      A complete set of files consists of
  29.  
  30.      BED.DOC    - this documentation
  31.      BED.EXE    - compiled, executable code
  32.      BED.BAS    - main program
  33.      BEDLIB.BAS - auxiliary BASIC routines used by BED.BAS, separately 
  34.                     compiled
  35.      BED.LIB    - compiled assembler routines used by BED
  36.  
  37.      REPORT.DAT     - a sample report.  We want to stip the report down to
  38.                     pure data, omit commas from numbers, and rearrange
  39.                     dates to year-month-day format with no separator
  40.                     between the date elements.
  41.      REPORT.SPC     - a sample editing specification that works on
  42.                     REPORT.DAT
  43.      REPORT.BAD     - A list of phrases whose presence should exclude a
  44.                     line from the output.  Needed by REPORT.SPC.
  45.  
  46.      Acknowledgement - this program uses some assembler routines
  47.      distributed by Tom Hanlin in ADVBAS.LIB.  ADVBAS is an excellent
  48.      shareware product that includes many useful assembler routines.
  49.  
  50.      7 December 1985
  51.  
  52.  
  53.  
  54.      *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
  55.  
  56.                            TABLE OF CONTENTS       
  57.  
  58.      What is BED?
  59.  
  60.      What Advantages does BED have over other Editors?
  61.  
  62.      How Can BED be Used?
  63.  
  64.      Exactly What Edits can BED do?
  65.  
  66.      How to Invoke BED
  67.  
  68.      Explanation of Each Editing Specification
  69.  
  70.      The Order of Edits
  71.  
  72.      How to Recompile BED
  73.  
  74.      *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
  75.  
  76.  
  77.      What is BED?
  78.  
  79.      BED is a batch editor.  EDITOR - because it modifies lines of text in
  80.      a file.  BATCH - because it runs batch rather than interactively.  The
  81.      only thing you specify interactively is what edits you want done.  
  82.  
  83.  
  84.      What Advantages does BED have over other Editors?
  85.  
  86.      o    Runs batch.
  87.  
  88.      BED is designed to run entirely unattended after you set up a
  89.      configuration file telling BED what to do.  This makes it ideal for
  90.      production work where files are edited repeatedly the same way.
  91.  
  92.      o    Speed.
  93.  
  94.      BED runs very fast.  "Interactive" editors often include a macro
  95.      facility whereby they can run batch also.  But, for each edit, they
  96.      usually page in part of the file that can be held in RAM, and do the
  97.      edit.  Each edit makes a full pass through the data file.  BED makes
  98.      exactly one pass through the data file, no matter how many edits are
  99.      done.  BED is also much more efficient at doing global search and
  100.      replaces than most editors.
  101.  
  102.      o    Does complex reformatting simply.
  103.  
  104.      BED is designed to make some complex edits very easy, such as
  105.      reformating date fields (e.g. removing separators and rearranging
  106.      fields, such as MM/DD/YY to YYMMDD) and changing formatted numbers
  107.      (dollar signs, parentheses around negative numbers, commas separating
  108.      thousands) to a "pure" data format (e.g. "($89,655.21)" to "-
  109.      89655.21").  BED also will preserve the original field length when
  110.      doing such edits by inserting filler blanks.  These edits are either
  111.      very difficult or impossible using other editors.
  112.  
  113.      o    No theoretical or practical limit on file size.
  114.  
  115.      Most editors either will not load large files or take forever to load
  116.      them before editing can begin, so that the time it takes to edit files
  117.      grows geometrically with file size.  BED works just as efficiently on
  118.      large files as on small.
  119.  
  120.      o    Maximum line length of 32,676.
  121.  
  122.      Most editors have a maximum line size of 256 characters or less.  BED
  123.      will edit individual lines up to 32,676.
  124.  
  125.      o    Supports criteria for excluding entire lines.
  126.  
  127.      Few editors allow you to select what lines to delete from a file.  BED
  128.      allows entire lines to be omitted based on length or the presence of
  129.      keywords.  Line exclusion criteria are applied before any other edits
  130.      are done.
  131.  
  132.      o    BED is freeform.
  133.  
  134.      This means that the text you edit does not have to be in any special
  135.      location or column.  BED will find the text to be edited no matter
  136.      where it occurs in the file or line.  Data base editors that allow you
  137.      to reformat data always require that the data be broken into fields
  138.      which are either fixed in length and/or order.  BED does not impose a
  139.      structure on the data.  You do not have divide your file into fields
  140.      and records, nor do you tell BED where in the file the data is
  141.      located.
  142.  
  143.      o    Source code is provided.
  144.  
  145.      You can fix bugs in BED or enhance it to do new tasks.  Commercial
  146.      editors never give you the source code.
  147.  
  148.  
  149.      How Can BED be Used?
  150.  
  151.      BED's primary use is to
  152.  
  153.      o    prepare data for reading into other programs.
  154.  
  155.      BED is basically a data preparation utility for "cleaning",
  156.      "scrubbing", or reformatting data.
  157.  
  158.      Often data needs to be changed before it can be loaded into a data
  159.      base management system for analysis and reporting.  A typical problem
  160.      is that data contains characters that make it easier for the human eye
  161.      to read, but which a data base management system can not accept,
  162.      including
  163.  
  164.      o    "non-numeric" characters in numeric fields, such as a dollar
  165.           sign, comma, or parentheses around negative numbers
  166.  
  167.      o    dates with separators between the month, day, and year, and the
  168.           fields in the wrong order.
  169.  
  170.      It is always good data processing policy to never store data with
  171.      formatting in it, but only to add formatting in reports. 
  172.      Unfortunately, this policy is sometimes violated, and sometimes the
  173.      only dump available of data is a report (spreadsheets are among the
  174.      worst offenders).  The presence of "formatting" characters in data
  175.      fields usually means that other programs cannot read the data. 
  176.      Reports also typically include page headers, titles, page numbers,
  177.      blank lines, printer pagination commands (form feeds), as well as
  178.      blank lines, which need to be stripped out to leave pure data.  BED is
  179.      expressly designed to eliminate such formatting.  For example, data
  180.      managers usually store dates in YYMMDD format so that they will sort
  181.      properly, and they will usually batch load dates only in the format. 
  182.      Yet the most common format for dates in the United States is MM-DD-YY. 
  183.      BED allows you to strip off the dashes and rearrange the elements of
  184.      the date.
  185.  
  186.  
  187.      Exactly What Edits can BED do?
  188.  
  189.      o    Exclude entire lines
  190.                -that are shorter than a minimum length
  191.                -that are longer than a maximum length
  192.                -that contain any of a specified list of strings
  193.  
  194.      Typical use:  you must load data that came from a report and which has
  195.      blank lines in it and page headers.  You must strip out these lines to
  196.      leave the pure data.  You tell BED to exclude empty lines (shorter
  197.      than 1) and lines with "PAGE" in it.  Form feeds, used by most
  198.      printers to cause a page eject, are automatically stripped out when
  199.      using the delete short line option.
  200.  
  201.      o    Global search and replace
  202.                -convert letters to upper case (all a-z to A-Z)
  203.                -convert any string to another string, including a target
  204.                     string that is empty (omit string)
  205.                -delete all occurrences of specified characters
  206.                -character translation (replace specified characters by
  207.                     specified characters)
  208.  
  209.      Typical use:  to decode or encode.  For example, you want to convert
  210.      numeric codes for a geographic region to short words. Or, you need to
  211.      replace dollar sign ($) by a blank, as in "$500.23" to " 500.23".
  212.  
  213.      o    Fill lines shorter than a minimum with any character
  214.  
  215.      Typical use:  to convert a file with missing data on the end of a line
  216.      to a file with fixed length (e.g. LOTUS "PRN" files that have missing
  217.      columns on the end do not fill with blanks).
  218.  
  219.      o    Convert numbers enclosed in parentheses to negatives numbers
  220.  
  221.      Typical use:  to make financial reports machine readable, where
  222.      numbers like (9,750) will be rejected as non-numeric.
  223.  
  224.      o    Omit commas inside numbers
  225.  
  226.      Typical use:  to make numbers machine readable.  For example,
  227.      4,200,500 needs to be reexpressed as 42000500.
  228.  
  229.      o    Change formats of date fields
  230.                -Remove separators between month, day, and/or year parts of
  231.                     a date field
  232.                -Rearrange month, day, year fields in dates
  233.                -Convert a spelled month in dates to numeric format
  234.                -Convert year field in dates between 4 and 2 digit format
  235.  
  236.      Typical use:  to make dates machine readable.  For example, LOTUS will
  237.      output a date as "Oct-85" but you need 8510.  Or 07/20/85 must be
  238.      rearranged to 850720.  Note:  BED always takes spelled months to be
  239.      the first three characters of the English spelling for months,
  240.      ignoring case.  The year element can be 4 or 2 digits.  A numeric day
  241.      or month element are assumed to have a length of two, so that in "
  242.      7/28/65" the leading blank is assumed to be the beginning of the date
  243.      field.
  244.  
  245.  
  246.      How to Invoke BED
  247.  
  248.      BED is invoked at DOS by typing
  249.  
  250.                BED/[options] [file spec] ...
  251.  
  252.      where the options are
  253.  
  254.         B      for  running batch.  You will not be asked for any
  255.                any input.  BED will run completely unattended and return to
  256.                DOS.  
  257.  
  258.         F      for  file of inputs.  The [file name] then refers to a list
  259.                of files that are to be consecutively edited.
  260.  
  261.      The file specification has the format
  262.  
  263.                      [drive letter]:\[path]\[file name]
  264.  
  265.      BED does not support wildcards.  The [file spec] is NOT the name of
  266.      the file to be edited, unlike virtually all other editors.  Except
  267.      when the /F option is specified, it is the file of specifications
  268.      telling BED what to do.  These specification files are written out by
  269.      BED, based on previous full screen keyboard entry.  Some examples:
  270.  
  271.         BED              No parameters.  BED then asks you if you want  to
  272.                          Edit another file or Quit to DOS.  If edit, will
  273.                          ask you for file of specifications.
  274.  
  275.         BED TEST.SPC     Read the saved editing specifications in file
  276.                          TEST.SPC, display them on the screen for possible
  277.                          changes.
  278.  
  279.         BED/B TEST.SPC   Read the saved specifications in TEST.SPC, display
  280.                          on the screen, then run them automatically.
  281.  
  282.         BED/B TEST1.SPC TEST2.SPC C:\DB\TEST3.SPC
  283.  
  284.                          Batch run according to specifications in
  285.                          TEST1.SPC, then TEST2.SPC, then C:\DB\TEST3.SPC. 
  286.                          You can give up to 10 files specifications in the
  287.                          command line.
  288.  
  289.         BED/F ALLRUNS    Read the list of specifications for editing file
  290.                          ALLRUNS, which is an unlimited list of file
  291.                          specifications rather than a single file
  292.                          specification.  Each file name in ALLRUNS is on a
  293.                          separate line.
  294.  
  295.         BED/B/F ALLRUNS  Same as above, except run all specifications
  296.                          automatically rather than asking whether want to
  297.                          run or edit.
  298.  
  299.  
  300.      Explanation of Each Editing Specification
  301.  
  302.      (1)  READ FR.  Name of file to be read.  The input file to be edited.
  303.                FR consists of variable length lines.  Each line is
  304.           terminated by a carriage-return-line-feed.  A line can have up to
  305.           32,676 characters in it.  There is no limit on the size of this
  306.           file.
  307.  
  308.      (2)  WRITE FW.  Name of file to be written.  Cannot be same as input
  309.           file.  Each line of input file is read, edited, and then written
  310.           to FW (unless excluded).  Format of output is same as input.
  311.  
  312.      (3)  SAVE SPECS IN FS.  Name of file the editing specifications are
  313.           saved in.
  314.                A save is executed prior to any run, except when run batch. 
  315.           Specs must be saved before you can run batch.
  316.  
  317.      (4)  EXCLUDE LINES with a length less than XX.  When a line is read in
  318.           that has a length less than XX, do not write it out.  Exclude it. 
  319.           Omit it.
  320.                Very useful when want to be able to check whether proper or
  321.           expected lines were excluded.  Exclude option can also be used to
  322.           split files into 2 subsets.
  323.  
  324.      (5)  EXCLUDE LINES with a word in file FX.  First read in all the
  325.           lines in file FX.  If any line in file FX is contained in a line
  326.           in FR, that line will be omitted.  So check each input line to
  327.           see if contains any line in FX that would trigger an exclusion.
  328.  
  329.      (6)  EXCLUDE LINES with a length greater than XX.  When a line is read
  330.           in that has more than XX characters, do not bother editing it
  331.           further.  Just omit it.
  332.  
  333.      (7)  SAVE LINES IN FILE FEXC.  If any lines are excluded, write them
  334.           out to file FEXC.
  335.  
  336.      (8)  CONVERT TO UPPER CASE.  Every line written out is to be converted
  337.           to upper case first.
  338.  
  339.      (9)  GLOBAL SEARCH AND REPLACE IN FSR.  File FSR contains a pair of
  340.           strings where the all occurrences of the first are to be replaced
  341.           by second.
  342.                Each pair is separated by a comma.  Quotes around each
  343.           string are necessary if it contains a comma.  An example of the
  344.           contents of a FSR would be
  345.  
  346.                          "JACKSON","JONES"
  347.                          comma,semi-colon
  348.                          "help,","help:"
  349.  
  350.      (10) DELETE THESE CHARACTERS.  In the list of characters to follow,
  351.           all occurences in all lines are to be eliminated.
  352.                CAUTION:  eliminating characters shortens lines.  Since the
  353.           number of occurrences can vary, lines that were originally the
  354.           same length may become variable length.
  355.  
  356.      (11) TRANSLATE FROM.  List of characters to be replaced.
  357.  
  358.      (12) TRANSLATE TO.  List of replacement characters.  Must be same
  359.           length as list translate from.  Each character translate from is
  360.           replaced by corresponding character translate to.
  361.                If $a=d are what is translated from and :A)g is what
  362.           translate to, then "abcdABCD$2+=dD" becomes "ABCDABCD:2+)gD" is
  363.           the result.  Note that translate never changes the length of a
  364.           string because it is only a 1 for 1 substitution.
  365.  
  366.  
  367.      (13) FIX LINE LENGTH pad lines shorted than XX.  When an output line
  368.           would have fewer characters than XX, extend it with enough blanks
  369.           to fill it out to XX.  Fill to the right.  Leave lines with XX or
  370.           more characters alone.
  371.  
  372.      (14) EDIT NUMBERS, convert parentheses to minus sign.  Whenever find a
  373.           number enclosed in parentheses, put a negative sign in front of
  374.           the number and write the result out as a replacement.  Will also
  375.           squeeze out trailing and leading blanks around number.  Will
  376.           preserve original length by blank filling to right as necessary. 
  377.           E.g.
  378.  
  379.           (88.5)10/24/85 ( 9.1213 ) becomes -88.5 10/24/85 -9.1213  )
  380.           (-12.14 )xxxxx(aa)        becomes --12.14  xxxxx(aa)
  381.           (12.a)(14.2               becomes (12.a)(14.2
  382.  
  383.      (15) EDIT NUMBERS, omit commas.  Commas inside of numbers are omitted. 
  384.           Length of numeric field is preserved by filling to left or right
  385.           by blanks.
  386.                CAUTION:  there is no infallible routine for recognizing a
  387.           numeric field properly.  BED looks for a comma.  If a numeric
  388.           digit is immediately to the left and three digits to the right,
  389.           BED assumes this is a numeric field.
  390.                The hardest thing for bed to do is to properly recognize
  391.           where a numeric field begins and ends.  To get the beginning of a
  392.           numeric field, BED looks a maximum of two more characters to the
  393.           left of the first numeric digit to the left of the comma.  If
  394.           these are numbers, BED assumes they belong to the numeric field. 
  395.           If BED encounters a non-numeric digit, it assumes the numeric
  396.           field ends there unless the character is a plus or minus sign.
  397.                To find the end of the number, BED keeps looking 4
  398.           characters to the right of the last known comma in a numeric
  399.           field.  If it is a comma, BED checks the three characters to the
  400.           right and assumes the numeric field continues if these are all
  401.           numeric digits; any non-numeric means the number ends.  If the
  402.           4th character ahead is a decimal, BED assumes it is a part of the
  403.           number and then looks for the decimal part and continues until a
  404.           non-numeric digit is encountered or a user specified maximum
  405.           number of digits is encountered.
  406.  
  407.      (16) EDIT NUMBERS, omit commas, right delimited?  Yes means than each
  408.           numeric field terminates to the right with a non-numeric
  409.           character (or is at the end of the line).
  410.                This would happen, for example, if each numeric field has at
  411.           most 5 digits, but was written out left-justified in a field 6
  412.           characters long.  Then a blank to the right would terminate each
  413.           numeric field.
  414.                This information is used by BED to decide whether to fill a
  415.           numeric field with blanks to the left or right.  Telling BED
  416.           there is a non-numeric to the right of each numeric field assures
  417.           BED that it will properly find the end of each number, so it
  418.           shifts numbers with commas to the left and fills to the right
  419.           with blanks.
  420.  
  421.      (17) EDIT NUMBERS, omit commas, maximum number of decimals.  Numbers
  422.           may occur with or without fractional parts.  Decimal numbers have
  423.           digits after a decimal point.  Tells BED the maximum number of
  424.           digits in a decimal part.
  425.                This information is used by BED to determine where the end
  426.           of a numeric field is and whether to fill to the left or right. 
  427.           If there are no decimals, BED shifts numbers to the left and
  428.           right fills.  If there are decimals, BED uses this as a maximum
  429.           number of digits to include in the decimal part.  If there are
  430.           decimals and numbers are not right delimited, BED shifts right
  431.           and fills to the left, hoping that numbers are right justified in
  432.           the data.
  433.  
  434.      CAUTION:  When strings of numbers occur together, BED may not properly
  435.      break these numbers into proper fields.  For example, the number
  436.      "811,132" may represent an inventory of 81 and a value of 1,132 or a
  437.      single number 811,132.  Or "2,811.5025" may mean a value of 2,811.50
  438.      with an inventory of 25, or the number 2,811.5025.  BED has no
  439.      foolproof way of knowing where a number begins or end.  BED relies on
  440.      context to break numbers into fields.  BED will work properly if each
  441.      numeric field has a non-numeric character beginning and ending it.  If
  442.      a non-numeric character always terminates the field, BED will work
  443.      properly when you tell it this, because it will shift numbers to the
  444.      left.  CHECK WHETHER YOUR DATA HAS ADJACENT NUMERIC FIELDS THAT RUN
  445.      TOGETHER.  Also, BEWARE COMMAS in non-numeric fields that can be
  446.      surrounded by numeric digits.  The only kinds of cases BED can
  447.      misinterpret when deleting commas from numbers are:
  448.  
  449.      (a)  non-numeric fields that contain a comma but look like a numeric
  450.           field when adjacent to non-numeric fields.  For example, if a
  451.           field has the "3,7" followed by "12C" and these occur together as
  452.           "3,712C", BED will misinterpret this as the number "3,712"
  453.           followed by "C" and hence produce either "3712 C" or " 3712C",
  454.           neither of which is right.
  455.  
  456.      (b)  no right delimiter, possible decimals, and an integer field
  457.           immediately in front of a second numeric field.  For example, if
  458.           a two digit field precedes a four digit field, BED will
  459.           misinterpret "815,001" to be " 815001" rather than the proper "81
  460.           5001".
  461.  
  462.  
  463.      (18) EDIT DATES, number of digits in input year.  How many digits are
  464.           in the year in date fields in the data.  BED assumes that all
  465.           dates have the same number of digits in the year.  Normally, this
  466.           will be 2 or 4, depending on whether the century is included.
  467.  
  468.      (19) EDIT DATES, number of digits in output year.  How many digits are
  469.           to be written out in dates with a year component.  If 4 are read
  470.           in and 2 written out, last two will be used.  If 2 are read in
  471.           and 4 written out, a "19" will be put in front.
  472.  
  473.      (20) EDIT DATES, separator between day, month, and year fields in a
  474.           date.  A single character, normally slash (/) or dash(-).   Used
  475.           to identify potential strings as dates.  Examine adjacent
  476.           characters to see whether they have date format.
  477.  
  478.      (21) EDIT DATES, edit date with spelled month.  Assumes spelled month
  479.           consists of first three letters of English spelling for months
  480.           (e.g. January is Jan).  Removes separator and uses numeric order
  481.           for month, e.g. Mar-85 is 0385.
  482.  
  483.      (23) EDIT DATES, spelled month, input date format.  Where you specify
  484.           what elements (month, day, year) are present and in what order
  485.           they occur (e.g. day then month then year is DMY).
  486.  
  487.      (24) EDIT DATES, spelled month, output date format.  What order want
  488.           elements of date field to be written out.  Allows you to
  489.           rearrange from input order.
  490.  
  491.      (25) EDIT DATES, edit numeric dates.  Each date field assumed to be 6
  492.           digit number with a field separator.  Assume want to drop
  493.           separator and possibly change field order.
  494.  
  495.      (26) EDIT DATES, edit numeric dates, input date format.  Any two or
  496.           three letters of "DMY", telling what fields are present in what
  497.           order.  E.g. "YM" means have only year followed by month with no
  498.           day.
  499.  
  500.      (27) EDIT DATES, edit numeric dates, output date format.  Same
  501.           possibilities as above, only used for output.  BED takes each
  502.           field in input, matches where occurs in output.  E.g. to
  503.           rearrange "12-05-82" to "821205", specify "MDY" for input and
  504.           "YMD" for output.
  505.  
  506.      CAUTION: Beware fields where a date separator may occur in non-date
  507.      fields and be surround by numbers.  For example, "if 12-10" really
  508.      means the equation 12 minus 10, it could be misinterpreted as the 10th
  509.      of December.
  510.  
  511.      NOTE: Auxiliary files that can be used by BED, such as a list of
  512.      phrases that will cause a line to be excluded, or a list of strings to
  513.      search and replace, have to be created outside of BED using an editor.
  514.  
  515.  
  516.      The Order of Edits
  517.  
  518.      The order that edits are applied can make a difference.  For example,
  519.      if you substitute '*' for '$' and then remove all lines with '$',
  520.      nothing will be removed.  Reversing the order, lines with $ will be
  521.      removed and then there will be nothing left to substitute.  In BED
  522.      there are eight editing functions:  the order in which they occur is
  523.  
  524.                     delete characters
  525.                     convert to upper case
  526.                     global search and replace
  527.                     translate characters
  528.                     omit commas from numbers
  529.                     convert numbers in parentheses to negative
  530.                     replace spelled dates
  531.                     replace numeric dates
  532.  
  533.      This is the default order that will be used if nothing else is
  534.      specified.  However, in BED you can completely control the order that
  535.      these edits are performed.  Where you would normally put "Y" to invoke
  536.      the function, simply put in "1" for the 1st to be performed, "2" for
  537.      the 2nd, etc.  Any options selected with a "Y" will be invoked in
  538.      their default order after the numbered options are selected.
  539.  
  540.  
  541.      How to Recompile BED
  542.  
  543.      BED was written in Microsoft QUICK BASIC, with some assembler routines
  544.      for speed.
  545.  
  546.      First, compile BEDLIB.BAS and BED.BAS.  The command to do this is
  547.  
  548.               bascom bedlib /w/o,bedlib,nul.lst
  549.               bascom bed    /w/o,bed,nul.lst
  550.  
  551.      Then link all the programs together:
  552.  
  553.               link BED+BEDLIB,BED,nul.map,BED.LIB 
  554.  
  555.