home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / filesort.ex < prev    next >
Text File  |  1993-11-18  |  4KB  |  82 lines

  1.     ----------------------------------------------------------
  2.     -- file sort - a tutorial example of a Euphoria program --
  3.     ----------------------------------------------------------
  4.  
  5. -- Alphabetically sorts the lines in a text file.
  6. -- usage: ex filesort < source > dest
  7.  
  8. include sort.e  -- This is the standard Euphoria generic sort routine. It 
  9.         -- will sort any type of data. e.g. sort({5, 1, 8, 9, 4}) or
  10.         -- sort({1.5, 9, 0, -999.9e5}) or sort({"ABC", "FRED", "XX"})
  11.         -- etc. see include\sort.e
  12.  
  13. constant TRUE = 1
  14.  
  15. procedure file_sort()  -- this is the main procedure
  16.     sequence buffer,   -- these variables can be assigned sequence values
  17.          sorted_buffer  
  18.     object line           -- this variable can be assigned *any* value, atom or
  19.                -- sequence
  20.  
  21.     buffer = {}        -- initialize buffer to the empty sequence (0 lines)
  22.  
  23.     while TRUE do         -- "infinite loop"
  24.     line = gets(0) -- read a line (sequence of chars) from standard input 
  25.     if atom(line) then -- gets(0) returns atom -1 on end of file
  26.         exit       -- quit the while loop
  27.     end if
  28.     buffer = append(buffer, line) -- add the line to the buffer of lines
  29.                       -- buffer is a sequence of sequences
  30.                       -- where each (sub)sequence represents
  31.     end while                  -- one line of text
  32.  
  33.     sorted_buffer = sort(buffer) -- call the sort routine, it will compare
  34.                  -- the lines against each other 
  35.                  -- alphabetically and return a new, sorted
  36.                  -- sequence of lines as a result
  37.  
  38.     for i = 1 to length(sorted_buffer) do
  39.     puts(1, sorted_buffer[i]) -- write out the lines of text to 
  40.     end for              -- the standard output
  41. end procedure
  42.  
  43. file_sort() -- execution starts here
  44.  
  45.    -- What are the good points about this program?
  46.  
  47. -- 1. The sizes of data structures are not declared.
  48. --    In most languages, such as C, you would have to declare a somewhat
  49. --    arbitrary maximum size for line and for buffer, or you would have to set
  50. --    up a complicated system of allocating storage using malloc and free.
  51.  
  52. -- 2. gets() does not require you to specify the maximum length of line 
  53. --    that can be read in. It will automatically create a sequence of 
  54. --    characters of the appropriate length to hold each incoming line.
  55.  
  56. -- 3. The sort routine is very simple. It takes a sequence as an argument,
  57. --    and returns a sequence as a result. In C, you might set up a 
  58. --    complicated call to a quicksort routine, requiring you to pass in
  59. --    a pointer to a compare function. You'd have to consult a manual to
  60. --    figure out how to do this.
  61.  
  62. -- 4. You did not overspecify the loop counter, i, by declaring it
  63. --    as a 16 or 32-bit integer. Its job is to count from 1 to the length
  64. --    of the buffer - who cares how many bits should be allocated for it?
  65.  
  66. -- 5. Extended memory will automatically be used to let buffer grow
  67. --    to a very large size. No 640K limit.
  68.  
  69. -- 6. The program executes with full runtime safety checking for bad
  70. --    subscripts, uninitialized variables etc.
  71.  
  72. -- 7. You can edit the program and immediately rerun it, without fussing
  73. --    with compiler options, linker options, makefiles etc.
  74.  
  75. -- 8. Since it is executed by an interpreter, loaded with runtime
  76. --    safety checks, and employing a generic sort routine, it runs very slow 
  77. --    -- NOT! 
  78. --    This program is FAST! It will easily outperform the MS-DOS sort command
  79. --    (machine language) and can handle much larger files. [see bench.doc]
  80.  
  81.  
  82.