source: FOIAVistA/trunk/r/LEXICON_UTILITY-LEX-GMPT/LEXAS2.m@ 1801

Last change on this file since 1801 was 628, checked in by George Lilly, 15 years ago

initial load of FOIAVistA 6/30/08 version

File size: 3.1 KB
Line 
1LEXAS2 ; ISL Look-up Check Input (ONE) ; 09-23-96
2 ;;2.0;LEXICON UTILITY;;Sep 23, 1996
3 ;
4ONE(LEXX) ; One letter missing/incorrect
5 ;
6 ; LEXRIM Trimmed string
7 ; LEXI Character position
8 ; LEXF First portion
9 ; LEXT Trailing portion
10 ; LEXTL Trailing letter
11 ; LEXNF Strings found
12 ; LEXO $O variable
13 ; LEXNT Temporary string
14 ; LEXX String returned
15 ;
16 N LEXI,LEXF,LEXT,LEXTL,LEXNF,LEXO,LEXNT,LEXRIM
17 S LEXTL=$E(LEXX,$L(LEXX)),LEXRIM=$$TRIM^LEXAS6(LEXX)
18 S LEXF=$E(LEXRIM,1,($L(LEXRIM)-1)),LEXNF="",LEXKEY=$G(LEXKEY)
19 F LEXI=1:1:$L(LEXX) D
20 . S LEXF=$E(LEXX,1,LEXI)
21 . S LEXT=$E(LEXX,(LEXI+1),$L(LEXX))
22 . S LEXO=$$SCH^LEXAS6(LEXF)
23 . F S LEXO=$O(^LEX(757.01,"AWRD",LEXO)) Q:LEXO'[LEXF D
24 . . S LEXO=$E(LEXO,1,($L(LEXF)+1))
25 . . Q:$L(LEXO)<($L(LEXF)+1)
26 . . S LEXNT=LEXO_LEXT
27 . . I $D(^LEX(757.01,"ASL",LEXNT)) D
28 . . . S LEXNF=LEXNF_"/"_LEXNT
29 . . S LEXNT=LEXO_$E(LEXT,2,$L(LEXT))
30 . . I $D(^LEX(757.01,"ASL",LEXNT)) D
31 . . . S LEXNF=LEXNF_"/"_LEXNT
32 . . S LEXO=LEXO_"~"
33 S:$E(LEXNF,1)="/" LEXNF=$E(LEXNF,2,$L(LEXNF))
34 I LEXNF'="",LEXNF["/" D PICK
35 I LEXNF'=""&(LEXNF'["/") S LEXRIM=LEXNF Q LEXRIM
36 S LEXRIM=$$TRIM^LEXAS6(LEXRIM) Q LEXRIM
37 Q LEXRIM
38 ;
39PICK ; Pick one string
40 ;
41 ; LEXNF Strings found
42 ; LEXAN Array of strings by frequency
43 ; LEXI Position/Piece in string
44 ; LEXIN Position/Piece in altered string
45 ; LEXEXP Expression
46 ; LEXES Expresseion segment/string
47 ; LEXKEY Key for selecting string
48 ; LEXKEYO $Orderable KEY
49 ; LEXOK Flag - Selection is OK
50 ; LEXC Control string
51 ; LEXP Character position in segment
52 ; LEXR Record number for expression
53 ; LEXN Altered string
54 ; LEXM Maximum string length
55 ; LEXS Shortest string length
56 ;
57 N LEXOK,LEXI,LEXC,LEXN,LEXS,LEXM S LEXI=0,LEXC=""
58 S LEXS=$P(LEXNF,"/",1)
59 F LEXI=1:1:$L(LEXNF,"/") D
60 . S LEXN=$P(LEXNF,"/",LEXI) I LEXC="" S LEXC=LEXN Q
61 . S LEXM=$S($L(LEXC)>$L(LEXN):$L(LEXC),1:$L(LEXN))
62 . N LEXP F LEXP=LEXM:-1:1 Q:$E(LEXC,1,LEXP)=$E(LEXN,1,LEXP)
63 . S:LEXP<$L(LEXS) LEXS=$E(LEXS,1,LEXP)
64 S LEXC=$E(LEXX,($L(LEXS)+2),$L(LEXX)),LEXN=""
65 ; Key supplied
66 I $L($G(LEXKEY)) S LEXOK=0 D Q:LEXOK
67 . ; order through pieces
68 . N LEXAN,LEXI
69 . F LEXI=1:1:$L(LEXNF,"/") D Q:LEXOK
70 . . S LEXN=$P(LEXNF,"/",LEXI)
71 . . ; order through expressions
72 . . N LEXR,LEXKEYO S LEXR=0,LEXKEYO=$$SCH^LEXAS6(LEXKEY)
73 . . F S LEXKEYO=$O(^LEX(757.01,"AWRD",LEXKEYO)) Q:LEXKEYO=""!(LEXKEYO'[LEXKEY)!(LEXOK) D
74 . . . F S LEXR=$O(^LEX(757.01,"AWRD",LEXKEYO,LEXR)) Q:+LEXR=0!(LEXOK) D
75 . . . . N LEXEXP S LEXEXP=$$UP^XLFSTR(^LEX(757.01,LEXR,0))
76 . . . . N LEXIN,LEXES F LEXIN=1:1:$L(LEXEXP," ") D Q:LEXOK
77 . . . . . S LEXES=$P(LEXEXP," ",LEXIN)
78 . . . . . Q:$E(LEXES,1)'=$E(LEXN,1)
79 . . . . . Q:$E(LEXN,$L(LEXN))'=$E(LEXES,$L(LEXN))
80 . . . . . N LEXP,LEXC S LEXC=0 F LEXP=1:1:$L(LEXN) D Q:LEXOK
81 . . . . . . I $E(LEXES,1,$L(LEXN))[$E(LEXN,LEXP) S LEXC=LEXC+1
82 . . . . . S:LEXC>0 LEXAN(-(LEXC))=LEXN
83 . S LEXN="" S:$O(LEXAN(-999999))<0 LEXN=$O(LEXAN(-999999)),LEXN=LEXAN(LEXN)
84 . I LEXN'="" S LEXNF=LEXN,LEXOK=1
85 ; No key supplied
86 F LEXI=1:1:$L(LEXNF,"/") D Q:LEXN[LEXC
87 . S LEXN=$P(LEXNF,"/",LEXI)
88 . I LEXN[LEXC,$E(LEXN,$L(LEXN))=LEXTL S LEXNF=LEXN
89 Q
Note: See TracBrowser for help on using the repository browser.