home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsr / sortda / SORTDATA.OPL
Text File  |  1992-06-30  |  2KB  |  81 lines

  1. REM
  2. REM    This procedure was adapted from the sorting routine in
  3. REM the Series 3 manual.  It is as slow (or slower), but
  4. REM automatically "reverses" names to sort on last name.  While
  5. REM it doesn't handle names like "van Dam", it does exclude
  6. REM names with "INC", "CORP", "PLC" or "LTD" from the reversal.
  7. REM (Note that it doesn't do this in a foolproof way.)
  8. REM
  9. REM    Written by David B. Nanian, UnderWare, Inc.
  10. REM    CompuServe ID 70531,2236, Internet: dnanian@uw.com
  11. REM    Uploaded 1 July 1992.
  12. REM
  13.  
  14. PROC SortData:
  15.     LOCAL last%,e$(255),e%,lpos%,n$(128),c%,sepPos%
  16.     n$="\dat\*.dbf"
  17.     dINIT "Sort Data File"
  18.     dFILE n$,"Data file:",0
  19.     IF DIALOG REM Returns 0 if cancelled
  20.         OPEN n$,a,name$
  21.         LAST
  22.         last%=POS
  23.         IF COUNT>0
  24.             WHILE last%<>0
  25.                 POSITION last%
  26.                 e%=POS
  27.                 e$=getName$:(a.name$)
  28.                 DO
  29.                     IF getName$:(a.name$)<e$
  30.                         e$=getName$:(a.name$)
  31.                         e%=POS
  32.                     ENDIF
  33.                     lpos%=POS
  34.                     BACK
  35.                 UNTIL POS=1 and lpos%=1
  36.                 POSITION e%
  37.                 PRINT e$
  38.                 UPDATE
  39.                 last%=last%-1
  40.             ENDWH
  41.         ENDIF
  42.         CLOSE
  43.     ENDIF
  44. ENDP
  45.  
  46. PROC getName$:(nameStr$)
  47.     LOCAL spLoc%,fstName$(127),lstName$(127)
  48.     
  49.     lstName$=UPPER$(nameStr$)
  50.     IF LOC(lstName$, ",")
  51.         RETURN lstName$
  52.     ENDIF
  53.     IF LOC(lstName$, "INC")
  54.         RETURN lstName$
  55.     ENDIF
  56.     IF LOC(lstName$, "CORP")
  57.         RETURN lstName$
  58.     ENDIF
  59.     IF LOC(lstName$, "PLC")
  60.         RETURN lstName$
  61.     ENDIF
  62.     IF LOC(lstName$, "LTD")
  63.         RETURN lstName$
  64.     ENDIF
  65.     spLoc%=LOC(lstName$," ")
  66.     WHILE spLoc%
  67.         IF spLoc%<>1
  68.             IF fstName$<>""
  69.                 fstName$=fstName$+" "
  70.             ENDIF
  71.             fstName$=fstName$+LEFT$(lstName$,spLoc%-1)
  72.         ENDIF
  73.         lstName$=RIGHT$(lstName$,LEN(lstName$)-spLoc%)
  74.         spLoc%=LOC(lstName$," ")
  75.     ENDWH
  76.     IF fstName$<>""
  77.         fstName$=", "+fstName$
  78.     ENDIF
  79.     RETURN lstName$+fstName$
  80. ENDP
  81.