1 | LEXAS2 ; ISL Look-up Check Input (ONE) ; 09-23-96
|
---|
2 | ;;2.0;LEXICON UTILITY;;Sep 23, 1996
|
---|
3 | ;
|
---|
4 | ONE(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 | ;
|
---|
39 | PICK ; 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
|
---|