Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LEXAS2

LEXAS2.m

Go to the documentation of this file.
  1. LEXAS2 ;ISL/KER - Look-up Check Input (ONE) ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; None
  1. ;
  1. ; External References
  1. ; $$UP^XLFSTR ICR 10103
  1. ;
  1. ONE(LEXX) ; One letter missing/incorrect
  1. ;
  1. ; LEXRIM Trimmed string
  1. ; LEXI Character position
  1. ; LEXF First portion
  1. ; LEXT Trailing portion
  1. ; LEXTL Trailing letter
  1. ; LEXNF Strings found
  1. ; LEXO $O variable
  1. ; LEXNT Temporary string
  1. ; LEXX String returned
  1. ;
  1. N LEXI,LEXF,LEXT,LEXTL,LEXNF,LEXO,LEXNT,LEXRIM
  1. S LEXTL=$E(LEXX,$L(LEXX)),LEXRIM=$$TRIM^LEXAS6(LEXX)
  1. S LEXF=$E(LEXRIM,1,($L(LEXRIM)-1)),LEXNF="",LEXKEY=$G(LEXKEY)
  1. F LEXI=1:1:$L(LEXX) D
  1. . S LEXF=$E(LEXX,1,LEXI)
  1. . S LEXT=$E(LEXX,(LEXI+1),$L(LEXX))
  1. . S LEXO=$$SCH^LEXAS6(LEXF)
  1. . F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO'[LEXF D
  1. . . S LEXO=$E(LEXO,1,($L(LEXF)+1))
  1. . . Q:$L(LEXO)<($L(LEXF)+1)
  1. . . S LEXNT=LEXO_LEXT
  1. . . I $D(^LEX(757.01,"ASL",LEXNT)) D
  1. . . . S LEXNF=LEXNF_"/"_LEXNT
  1. . . S LEXNT=LEXO_$E(LEXT,2,$L(LEXT))
  1. . . I $D(^LEX(757.01,"ASL",LEXNT)) D
  1. . . . S LEXNF=LEXNF_"/"_LEXNT
  1. . . S LEXO=LEXO_"~"
  1. S:$E(LEXNF,1)="/" LEXNF=$E(LEXNF,2,$L(LEXNF))
  1. I LEXNF'="",LEXNF["/" D PICK
  1. I LEXNF'=""&(LEXNF'["/") S LEXRIM=LEXNF Q LEXRIM
  1. S LEXRIM=$$TRIM^LEXAS6(LEXRIM) Q LEXRIM
  1. Q LEXRIM
  1. ;
  1. PICK ; Pick one string
  1. ;
  1. ; LEXNF Strings found
  1. ; LEXAN Array of strings by frequency
  1. ; LEXI Position/Piece in string
  1. ; LEXIN Position/Piece in altered string
  1. ; LEXEXP Expression
  1. ; LEXES Expresseion segment/string
  1. ; LEXKEY Key for selecting string
  1. ; LEXKEYO $Orderable KEY
  1. ; LEXOK Flag - Selection is OK
  1. ; LEXC Control string
  1. ; LEXP Character position in segment
  1. ; LEXR Record number for expression
  1. ; LEXN Altered string
  1. ; LEXM Maximum string length
  1. ; LEXS Shortest string length
  1. ;
  1. N LEXOK,LEXI,LEXC,LEXN,LEXS,LEXM S LEXI=0,LEXC=""
  1. S LEXS=$P(LEXNF,"/",1)
  1. F LEXI=1:1:$L(LEXNF,"/") D
  1. . S LEXN=$P(LEXNF,"/",LEXI) I LEXC="" S LEXC=LEXN Q
  1. . S LEXM=$S($L(LEXC)>$L(LEXN):$L(LEXC),1:$L(LEXN))
  1. . N LEXP F LEXP=LEXM:-1:1 Q:$E(LEXC,1,LEXP)=$E(LEXN,1,LEXP)
  1. . S:LEXP<$L(LEXS) LEXS=$E(LEXS,1,LEXP)
  1. S LEXC=$E(LEXX,($L(LEXS)+2),$L(LEXX)),LEXN=""
  1. ; Key supplied
  1. I $L($G(LEXKEY)) S LEXOK=0 D Q:LEXOK
  1. . ; order through pieces
  1. . N LEXAN,LEXI
  1. . F LEXI=1:1:$L(LEXNF,"/") D Q:LEXOK
  1. . . S LEXN=$P(LEXNF,"/",LEXI)
  1. . . ; order through expressions
  1. . . N LEXR,LEXKEYO S LEXR=0,LEXKEYO=$$SCH^LEXAS6(LEXKEY)
  1. . . F S LEXKEYO=$O(^LEX(757.01,"AWRD",LEXKEYO)) Q:LEXKEYO=""!(LEXKEYO'[LEXKEY)!(LEXOK) D
  1. . . . F S LEXR=$O(^LEX(757.01,"AWRD",LEXKEYO,LEXR)) Q:+LEXR=0!(LEXOK) D
  1. . . . . N LEXEXP S LEXEXP=$$UP^XLFSTR(^LEX(757.01,LEXR,0))
  1. . . . . N LEXIN,LEXES F LEXIN=1:1:$L(LEXEXP," ") D Q:LEXOK
  1. . . . . . S LEXES=$P(LEXEXP," ",LEXIN)
  1. . . . . . Q:$E(LEXES,1)'=$E(LEXN,1)
  1. . . . . . Q:$E(LEXN,$L(LEXN))'=$E(LEXES,$L(LEXN))
  1. . . . . . N LEXP,LEXC S LEXC=0 F LEXP=1:1:$L(LEXN) D Q:LEXOK
  1. . . . . . . I $E(LEXES,1,$L(LEXN))[$E(LEXN,LEXP) S LEXC=LEXC+1
  1. . . . . . S:LEXC>0 LEXAN(-(LEXC))=LEXN
  1. . S LEXN="" S:$O(LEXAN(-999999))<0 LEXN=$O(LEXAN(-999999)),LEXN=LEXAN(LEXN)
  1. . I LEXN'="" S LEXNF=LEXN,LEXOK=1
  1. ; No key supplied
  1. F LEXI=1:1:$L(LEXNF,"/") D Q:LEXN[LEXC
  1. . S LEXN=$P(LEXNF,"/",LEXI)
  1. . I LEXN[LEXC,$E(LEXN,$L(LEXN))=LEXTL S LEXNF=LEXN
  1. Q