home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / doc / mir / 16ascii < prev    next >
Text File  |  1992-06-29  |  22KB  |  492 lines

  1.               ═══════════════════════════════════════
  2.  
  3.                   6.   WORKED EXAMPLES...
  4.                        VARIATIONS IN ASCII TEXT
  5.  
  6.               ═══════════════════════════════════════
  7.  
  8.  
  9.             The next three topics will be richer to the extent that
  10. you and other readers provide samples that can be used to explain
  11. the various forms in which data is held in real files.  The variety
  12. is staggering... in working with between 200 and 300 large
  13. databases in the late 1980s, I found that only a few formats and
  14. sets of rules were replicated entirely across databases.  Many more
  15. databases had unique patterns or combinations of rules.  But a word
  16. of encouragement... analysis really does get easier along the way.
  17.  
  18.  
  19.         ════════════════════════════════
  20. 6.1           Other analysis tools
  21.         ════════════════════════════════
  22.  
  23.             Here is an assortment of programs useful with ASCII
  24. text files.  Source code is included on the diskettes.
  25.  
  26. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  27. usage:  lines  file_name[s]
  28.  
  29.         Provides a quick count of the number of lines in each of
  30.         one or more files.
  31.  
  32. input:  Any file[s], but most useful if ASCII text.
  33.  
  34. output: A one line report on the screen of the number of lines in
  35.         each input file.
  36.  
  37. writeup: MIR TUTORIAL ONE, topic 6
  38. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  39.  
  40.             The DOS DIR command is one measure of size of a file. 
  41. The LINES command is another.  It is quick.  Try it on some of the
  42. source files.  For example,
  43.  
  44.                 LINES A_PATTRN.C A_BYTES.C LINES.C DOSIFY.C
  45.  
  46. yielded this answer on the screen:
  47.  
  48.                 344 lines in file a_pattrn.c
  49.                 335 lines in file a_bytes.c
  50.                 132 lines in file lines.c
  51.                 154 lines in file dosify.c
  52.  
  53.                 965 lines TOTAL
  54.  
  55. The actual count may differ when you try it; that would be on
  56. account of later revisions in your copy of each of these files.
  57.  
  58.             LINES is particularly useful in preparation for a SORT
  59. of a file.
  60.  
  61.  
  62. ≡≡≡≡->> QUESTION:
  63.             The programs that use lists of file names as inputs
  64.             would be improved by a function to expand out wild
  65.             cards in file names (each ? to be replaced by a single
  66.             character, each * to be replaced by zero or one or
  67.             several characters).  Try your hand at it and share the
  68.             result.
  69.                                                             <<-≡≡≡≡
  70.  
  71.             Another program provides an analysis of line lengths:
  72.  
  73. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  74. usage:  a_len [interval] file_name[s]
  75.  
  76.         Analyze the distribution of line lengths up to 1024 bytes
  77.         within any file.  The reporting interval (an integer from
  78.         1 to 100) is a count of the lengths that will be grouped
  79.         together.  For example, an interval of 10 means that
  80.         frequencies of length 0, length 1-10, length 11-20, etc.
  81.         are shown in the report.  The default interval is 10.  If
  82.         the first file name starts with numeric digits, show the
  83.         interval first!
  84.  
  85. input:  Any ASCII file[s].
  86.  
  87. output: file_name.len which reports the frequency of line lengths
  88.         occurring in the file.  Lengths exclude carriage returns
  89. and
  90.         line feeds.
  91.  
  92. writeup: MIR TUTORIAL ONE, topic 6
  93. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  94.  
  95.             Here is the result of
  96.  
  97.                 A_LEN SVP_TXT
  98.  
  99.    1 -  10:     63   1.5%
  100.   11 -  20:    154   3.7%
  101.   21 -  30:    160   3.9%
  102.   31 -  40:    186   4.5%
  103.   41 -  50:    185   4.5%
  104.   51 -  60:    832  20.2%
  105.   61 -  70:   2538  61.6%
  106.  
  107.               Over 80 per cent of lines are between 51 and 70 bytes
  108. long.  None are longer.  That's a very strong indication that the
  109. file is printable text.  Non-displayable files are much more likely
  110. to have random distances between line feed characters.  (For a more
  111. detailed list, try the command A_LEN 1 SVP_TXT.)
  112.  
  113.             A_LEN also tells us whether line-oriented utility
  114. programs are likely to work.  Some line editors behave badly when
  115. data has long lines.  It is common that versions of UNIX "vi" for
  116. example choke up with lines over 256 bytes in length.
  117.  
  118.             LINE_NUM has a variety of uses.
  119.  
  120. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  121. Usage   line_num [ starting_line_no ]  < stdin > stdout
  122.  
  123.         Assign a sequence number to each line in a file, starting
  124.         either at zero or at a user-specified sequence number.
  125.  
  126. input:  Any printable ASCII file.
  127.  
  128. output: One line for each line of input.  A sequence number is
  129.         left justified, followed by a tab, then the input line
  130.         exactly as received.  Empty lines are counted, but left
  131.         empty.
  132.  
  133. writeup: MIR TUTORIAL ONE, topic 6
  134. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  135.  
  136.             Try it with the DOS command FIND.  For example,
  137.  
  138.                 LINE_NUM < A_BYTES.C | FIND "Usage"
  139.  
  140. The result on the screen is:
  141.  
  142.     62      void    process(), Usage_(), report(), non_exist() ;
  143.     88              Usage_();
  144.     114 Usage_()
  145.  
  146. In other words, the term "Usage" occurs on lines 62, 88 and 114.
  147.  
  148.  
  149.         ═════════════════════════════════
  150. 6.2           ASCII markup patterns
  151.         ═════════════════════════════════
  152.  
  153.             The simplest form of text is called WYSIWYG (pronounced
  154. wizzy-wig).  It stands for "What you see is what you get."   A
  155. document or communication consists of content and form.   Depending
  156. on how the author has arranged the content of a WYSIWYG file, you
  157. as a reader can get all of the content, but may miss much of the
  158. intended form.
  159.  
  160.             Does form matter?  On even the simplest one page memo,
  161. yes!  Lack of form imposes obstacles to understanding.  We look to
  162. form to highlight answers to key questions:  Who is this from? 
  163. When was it prepared?  What was uppermost in the author's mind? 
  164. For whom is the message intended?  What response is desired or
  165. intended?  What is being stressed?  What parts are subordinate
  166. explanation?  How does one communicate a response to the author? 
  167. Visualize a memo that simply runs everything together as a stream
  168. of words in a single paragraph.  The answers may be there.  But
  169. reading time goes way up.  The message is therefore less likely to
  170. be read in full, and less likely to be understood correctly if it
  171. is read.
  172.  
  173.             The longer and the more complex the communication, the
  174. more form matters.  Form guides the reader through the structure of
  175. the document.  For example:
  176.  
  177.         »   The level of a heading is indicated by location on a
  178.             page, type size, case, font selection, proximity to
  179.             other material, use of graphic enhancement, associated
  180.             numbering, and even color.  An unnumbered heading,
  181.             centred and alone on a page, in bold upper case
  182.             italics, carries a message quite distinct from exactly
  183.             the same words preceded by "6.5.3", left justified,
  184.             primarily lower case, and with following text
  185.             continuing on the same line in the same font.
  186.  
  187.         »   Structure is needed to sort out the cross referencing
  188.             of complex material:  Are footnotes at the bottom of
  189.             the page, at the end of the chapter, or in their own
  190.             section among the support sections at the end of the
  191.             document?
  192.  
  193.         »   A table of contents is intended to clarify structure.
  194.  
  195.         »   A preface underlines purpose.
  196.  
  197.         »   An index helps the user to find material of particular
  198.             interest.
  199.  
  200.             You have just read a series of indented points.  They
  201. are parallel and separated.  The form is more readily understood
  202. than the same content run together into one paragraph.
  203.  
  204.             A computer file is essentially a stream of bytes.  To
  205. indicate form, there has to be either:
  206.  
  207.         »   a definition of the structure separate from the file;
  208.             or
  209.  
  210.         »   signals embedded within the file content.
  211.  
  212.             The simplest external definition is that a "line"
  213. contains a certain number of bytes (often 80).  Alternately, the
  214. external definition may itself be a lengthy file.
  215.  
  216.             Internal signals or codes must be distinguishable from
  217. the content.  These signals may involve characters unused in the
  218. text (nulls, non-printing characters); they may be sequences of
  219. printable characters that are guaranteed not to appear as part of
  220. the content.  Whatever their format, internal structure and
  221. formatting codes should also be consistent across the entire file. 
  222. (But don't count on it.  I was given a small database in which the
  223. sequence "<I>" had two or more quite distinct meanings.  It turned
  224. out the database provider knew of the flaw and, instead of
  225. correcting it, resorted to physically pasting up copy for photo
  226. reproduction.  Inconsistency is costly.)
  227.  
  228.  
  229.         ══════════════════════════════════
  230. 6.3            Standard Generalized
  231.               Markup Language (SGML)
  232.         ══════════════════════════════════
  233.  
  234.             The word "rigor" is used in mathematics to convey
  235. notions of completeness, logic and disciplined consistency.  The
  236. Standard Generalized Markup Language is an attempt to ensure rigor
  237. in the transfer of documents.  Standards are paradoxical... at one
  238. and the same time an imposition and a convenience.  In the case of
  239. SGML, the imposition is in having to learn and methodically apply
  240. methods of declaring structure and of representing codes within
  241. content.  In exchange for the pain, the gain is clarity in what is
  242. intended by the author (or subsequent editor) in documents that
  243. adhere to the standard.  As the standard takes hold, we indexers
  244. profit from increasingly greater consistency across databases. In
  245. the long run, we will spend much less time spent deciphering
  246. "orphan" database structures and markup methods.
  247.  
  248.             In SGML, the elements of form and structure are
  249. declared in a distinct document which can be transmitted with the
  250. database(s).  Tagging is a separate task.  Wide variability is
  251. allowed in the symbols used for tagging content, but consistency is
  252. enforced in the methods of tagging.  One gets the impression that
  253. the early writers on SGML have inadvertently set more of a standard
  254. than they intended; one sees their particular choices of symbols
  255. being picked up as if they were part of the standard.  Example:
  256. "the figures shown in <tableref>Table 7.2</tableref>..." where "<"
  257. starts an opening tag and "</" a closing tag.   For our purposes,
  258. the more consistency the better!  The less time spent setting up
  259. for alternative tag sets, the quicker we can get data into a form
  260. that permits automated indexing.
  261.  
  262.             One of the beauties of SGML is its breadth.  WYSIWYG
  263. can be viewed as untagged SGML; one needs simply the declaration of
  264. an unstructured byte stream to be the structure.  We can write
  265. software to parse and manipulate this simplest form of text.  The
  266. software may be expanded on an as-needed basis whenever we wish to
  267. add structure and formatting.  In that sense, the form of text we
  268. use for automated indexing may be considered a form of SGML.  If we
  269. want more speed in the inversion and indexing process, we can adopt
  270. a specific selection of tag to be recognized by our parser.  The
  271. cost is that we must convert data received from others to our tag
  272. types.  If the incoming data is true SGML, then our preprocessing
  273. software can be a simple table replacement algorithm (easy stuff to
  274. write).
  275.  
  276.             Tutorial THREE deals with automated indexing.  The
  277. primary version of the software is kept simple for instructional
  278. purposes.  But there is nothing stopping us from building more
  279. sophisticated parsers based on more elaborate SGML declarations. 
  280. Let's do it together, basing the expansions on real world needs
  281. that you encounter.
  282.  
  283.  
  284.         ═════════════════════════════════════════
  285. 6.4           Free versus hierarchical text
  286.         ═════════════════════════════════════════
  287.  
  288.             Text data includes virtually anything that can be typed
  289. on a computer keyboard.  The most familiar is free text.  Natural
  290. language is our normal way of communicating with one another. 
  291. Words and phrases are grouped according to grammatical rules to
  292. form sentences and paragraphs.  Words and phrases give each other
  293. context, so that communication creates a picture or impression in
  294. the mind of the person receiving it.  The text is free in the sense
  295. that from a computer standpoint no divisions or rules are implied. 
  296. There is no computer-based definition or limit to the length of a
  297. word or line or paragraph.  This paragraph, considered alone and by
  298. itself, is an example of free text.
  299.  
  300.             In lengthy communication, free text is sub-divided. 
  301. The divisions may be as subtle as an extra line feed to mark the
  302. end of paragraphs.  The more complex the document, the more likely
  303. it is divided into sections, chapters, or articles.  Subdivisions
  304. are meant to be an aid to understanding.  Our comprehension of a
  305. book is improved if we can associate what we are reading with a
  306. chapter name and book title.  Hierarchical data is a term that
  307. covers this type.  Each paragraph is connected with a hierarchy of
  308. headings (book, chapter, section, sub-section).  Hierarchical data
  309. is also found in newspaper articles, business reports, dictionary
  310. entries, and encyclopedia entries.  Each has one or more levels of
  311. headings.
  312.  
  313.             A variation on hierarchical data is text that is cross
  314. referenced.  Cross references are an internal form of subject
  315. index.  They are created manually and inserted within the text. 
  316. Human judgment is involved, and their creation is both expensive
  317. and a matter of personal judgment.  Where a record touches on more
  318. than one subject, multiple cross reference paths may branch out
  319. from the one record.  Heavily studied databases such as religious
  320. scriptures are often cross referenced.
  321.  
  322.             At some point, a threshold is passed whereby the rules
  323. are no longer (only) implied in the natural language, but are
  324. expressed in computer terms as well.  The file is no longer treated
  325. as a simple byte stream.  A hierarchical model of some sort is
  326. imposed on the data to distinguish among the various levels and
  327. categories of information.  In Tutorial TWO we will see how the
  328. power of an hierarchical model can be wedded to the simplicity of
  329. a byte stream.  It comes down to a simple trick of doing away with
  330. the assumption that records have to be numbered consecutively. 
  331. More to follow!
  332.  
  333.  
  334.         ════════════════════════════════════════
  335. 6.5           Fielded variable length text
  336.         ════════════════════════════════════════
  337.  
  338.             Consider the following:
  339.  
  340.         Part Number:         CL4-097-B
  341.         Description:         VALVE SPRING ASSEMBLY
  342.         Quantity on hand, location 1:           57
  343.         Quantity on hand, location 2:            0
  344.         Quantity on hand, location 3:       16,212
  345.         Quantity on hand, location 4:        8,004
  346.         Usage, this month:                   4,211
  347.         Usage, same month last year:         3,654
  348.         Usage, current year to date:        31,032
  349.         Usage, last year to date:           23,996
  350.         Economic order quantity:             1,000
  351.         Cost per unit:                    $ 12.975
  352.         Permitted substitute part #:     CL4-997-X
  353.         Permitted substitute part #:     DY6-000-P
  354.  
  355.             The above is an inventory record.  Each line is a
  356. "field", an element of data which describes one attribute of the
  357. item under discussion.  Fielded data is very common in business
  358. records.  Here is a variation on the same data:
  359.  
  360. <pn>CL4-097-B\0<ds>VALVE SPRING ASSEMBLY\0<q1>57\0
  361. <q3>16212\0<q4>8004\0<um>4211\0<ul>3654\0<uy>31032
  362. <up>23996\0<eo>1000\0<co>12.975\0<sp>CL4-997-X\0<s
  363. p>DY6-000-P\0
  364.  
  365.             In the second version, the name or title is implied for
  366. each field by a mnemonic tag.  The length of fields is variable in
  367. every sense... from one field to the next, and in the same field
  368. from one record to the next.  The data size for one field may be as
  369. short as a single character.  Since tags are used, fields may be
  370. dropped entirely when they are empty of data.  Some fields may even
  371. be repeated  (as in the substitute part field which occurs twice.)
  372.  
  373.             End of data within each field above is indicated by a
  374. marker, in this case "\0".  Here is a variation that reduces the
  375. storage space for this particular record from 163 to 143 bytes. 
  376. End of a field is signalled by the tag which begins the following
  377. field.  An end of record tag has to be added so that the length of
  378. the last field is defined.
  379.  
  380. <pn>CL4-097-B<ds>VALVE SPRING ASSEMBLY<q1>57<q3>16
  381. 212<q4>8004<um>4211<ul>3654<uy>31032<up>23996<eo>1
  382. 000<co>12.975<sp>CL4-997-X<sp>DY6-000-P<fn>
  383.  
  384.  
  385. ≡≡≡≡->> QUESTION:
  386.             Under what conditions does removal of the end of field
  387.             marker sacrifice information or introduce ambiguity?
  388.                                                             <<-≡≡≡≡
  389.  
  390.             Why have fielded records been included in a topic on
  391. ASCII text?  Precisely because each field contains printable ASCII
  392. characters.  Analysis of ASCII fielded records is much simpler than
  393. analysis of their binary counterparts.  Variable length ASCII
  394. fielded records are recognized by their frequent repetition of the
  395. tags.  The A_PATTRN program can be used on the first character of
  396. the tag to pull out all occurrences.
  397.  
  398.             Here's another example of fielded variable length data:
  399.  
  400. 000
  401. 001 Historic documents
  402. 002 United States
  403. 003 Civil War
  404. 004 Gettysburg Address
  405. 005 November 19, 1863
  406. 006 Lincoln, Abraham
  407. 006 President Abraham Lincoln
  408. 007     Fourscore and seven years ago our forefathers brought
  409. 007 forth upon this continent a new nation, conceived in liberty
  410. 007 and dedicated to the proposition that all men are created
  411. ...
  412.  
  413.             The example contains four levels of heading.  006 may
  414. be either an author or a historic person field; we don't know
  415. unless we view other records or are given access to the list of
  416. field definitions.  Field 007 goes on at length.  After field 007
  417. there may be other data such as cross references.  The next record
  418. is identified by "000" at the left margin.  The first three columns
  419. are, by virtue of position, field identifiers or tags.  The fourth
  420. column is blank simply to enhance readability.  This simple format
  421. is a first step from WYSIWYG toward SGML.  Precisely because it is
  422. simple, I often use it as an intermediate step in setting up for
  423. indexing.  (The earlier FindIt product used a more complex
  424. variation in which the fourth column contained codes.  Hindsight
  425. shows that the simpler version is more powerful.)
  426.  
  427. In fixed length ASCII fielded records, a pattern noticeably
  428. recurs... possibly blocks of white space, or fields containing
  429. dates (MAY 22 92), that stand out readily and shift the same number
  430. of columns left or right at regular vertical intervals.
  431.  
  432.  
  433.         ══════════════════════════════════════════════
  434. 6.6           Independent versus continuous data
  435.         ══════════════════════════════════════════════
  436.  
  437.             Records occur in some physical order within a computer
  438. file.  The white rabbit in "Alice and Wonderland" preferred a
  439. simple order for things:  "Start at the beginning, keep going until
  440. you get to the end, and then stop."  In a document such as a book
  441. or a business report, there is usually a distinguishable beginning
  442. and end.  In a database of library books and periodicals, the
  443. physical order may be date of acquisition... the later the date of
  444. receipt, the further the record is toward the end of the sequence
  445. of records.  In an inventory file, either part number or date of
  446. addition may govern the physical order.
  447.  
  448.             Try the command
  449.  
  450.                 FIND "HEAD4" SVP_TXT
  451.  
  452. It turns out that this data set is ordered according to sequential
  453. numbering of the various pieces of correspondence.  The result of
  454. the above command has 106 lines, starting as follows:
  455.  
  456. @HEAD4 = 417. - TO SAINT LOUISE DE MARILLAC,<B^>1<D> IN ANGERS
  457. @HEAD4 = 418. - TO LOUIS ABELLY,<B^>1<D> VICAR GENERAL OF BAYONNE
  458. @HEAD4 = 419. - TO SAINT LOUISE, IN ANGERS
  459. @HEAD4 = 420. - TO SAINT LOUISE, IN ANGERS
  460. @HEAD4 = 421. - TO SAINT LOUISE, IN ANGERS
  461. @HEAD4 = 422. - TO SAINT LOUISE, IN ANGERS
  462. @HEAD4 = 423. - TO LOUIS LEBRETON,<B^>1<D> IN ROME
  463. @HEAD4 = 424. - TO JACQUES THOLARD,<B^>1<D> IN ANNECY
  464.  
  465.             Being able to detect sequence within one field helps in
  466. the data analysis.  This is because patterns show up more quickly
  467. when there is a strictly ordered field within the data.  An ordered
  468. field helps to determine sequence when the total data set has to be
  469. pieced together from a number of files.  And if the data has been
  470. garbled or truncated, order facilitates repair.  Ah, yes, Virginia,
  471. there is damaged data out there... a lot of it.  There is nothing
  472. like indexing a set of data to find all kinds of errors in it. 
  473. Every garbled spelling and extraneous piece of garbage shows up in
  474. the list of indexed terms.
  475.  
  476.             If records are truly independent and in no sequence,
  477. there is no need for the retrieval software to display nearby
  478. records.  But if there is continuity in the data, the person
  479. searching through the data will like the ability to see the records
  480. that occur before or after the records found by a search.
  481.  
  482.  
  483.                         *   *   *   *   *
  484.  
  485.             In this topic, we have looked at tools for analyzing
  486. ASCII text files.  We found that formatting and markup of ASCII
  487. text is extremely varied.  Indexing will become simpler and less
  488. time consuming as standards become widely accepted.  Physical
  489. storage presupposes a flat data model; hierarchical models can be
  490. inferred by segregating data into fields.  Continuous data is
  491. easier to work with in index preparation than truly independent
  492. non-sequential files.