source: ccr/trunk/p/C0CRXNRD.m@ 593

Last change on this file since 593 was 593, checked in by Sam Habiel, 15 years ago

updated RPMS Meds...; still working on RxNorm

File size: 4.5 KB
Line 
1C0CRXNRD ; WV/SMH - CCR/CCD PROJECT: Routine to Read RxNorm files;11/15/08
2 ;;0.1;CCDCCR;nopatch;noreleasedate
3 W "No entry from top" Q
4 ;
5DELFILED(FN) ; Delete file data; PEP procedure; only for RxNorm files
6 ; FN is Filenumber passed by Value
7 QUIT:$E(FN,1,3)'=176 ; Quit if not RxNorm files
8 D CLEAN^DILF ; Clean FM variables
9 N ROOT S ROOT=$$ROOT^DILFD(FN,"",1) ; global root
10 N ZERO S ZERO=@ROOT@(0) ; Save zero node
11 S $P(ZERO,U,3,9999)="" ; Remove entry # and last edited
12 K @ROOT ; Kill the file -- so sad!
13 S @ROOT@(0)=ZERO ; It riseth again!
14 QUIT
15GETLINES(PATH,FILENAME) ; Get number of lines in a file
16 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")
17 U IO
18 N I
19 F I=1:1 R LINE Q:$$STATUS^%ZISH
20 D CLOSE^%ZISH("FILE")
21 Q I-1
22READCON(PATH) ; Open and read concepts file: RXNCONSO.RRF
23 I PATH="" QUIT
24 N FILENAME S FILENAME="RXNCONSO.RRF"
25 D DELFILED(176.001) ; delete data
26 N LINES S LINES=$$GETLINES(PATH,FILENAME)
27 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")
28 IF POP D EN^DDIOL("Error reading file..., Please check...") G EX
29 N C0CCOUNT
30 F C0CCOUNT=1:1 D Q:$$STATUS^%ZISH
31 . U IO
32 . N LINE R LINE
33 . IF $$STATUS^%ZISH QUIT
34 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 1000
35 . N RXCUI,RXAUI,SAB,TTY,CODE,STR ; Fileman fields numbers below
36 . S RXCUI=$P(LINE,"|",1) ; .01
37 . S RXAUI=$P(LINE,"|",8) ; 1
38 . S SAB=$P(LINE,"|",12) ; 2
39 . S TTY=$P(LINE,"|",13) ; 3
40 . S CODE=$P(LINE,"|",14) ; 4
41 . S STR=$P(LINE,"|",15) ; 5
42 . ; Remove embedded "^"
43 . S STR=$TR(STR,"^")
44 . ; Convert STR into an array of 80 characters on each line
45 . N STRLINE S STRLINE=$L(STR)\80+1
46 . ; In each line, chop 80 characters off, reset STR to be the rest
47 . N J F J=1:1:STRLINE S STR(J)=$E(STR,1,80) S STR=$E(STR,81,$L(STR))
48 . ; Now, construct the FDA array
49 . N RXNFDA
50 . S RXNFDA(176.001,"+"_C0CCOUNT_",",.01)=RXCUI
51 . S RXNFDA(176.001,"+"_C0CCOUNT_",",1)=RXAUI
52 . S RXNFDA(176.001,"+"_C0CCOUNT_",",2)=SAB
53 . S RXNFDA(176.001,"+"_C0CCOUNT_",",3)=TTY
54 . S RXNFDA(176.001,"+"_C0CCOUNT_",",4)=CODE
55 . D UPDATE^DIE("","RXNFDA")
56 . I $D(^TMP("DIERR",$J)) D EN^DDIOL("ERROR") G EX
57 . ; Now, file WP field STR
58 . D WP^DIE(176.001,C0CCOUNT_",",5,,$NA(STR))
59EX D CLOSE^%ZISH("FILE")
60 QUIT
61READNDC(PATH) ; Open and read NDC/RxNorm/VANDF relationship file: RXNSAT.RRF
62 I PATH="" QUIT
63 N FILENAME S FILENAME="RXNSAT.RRF"
64 D DELFILED(176.002) ; delete data
65 N LINES S LINES=$$GETLINES(PATH,FILENAME)
66 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")
67 IF POP W "Error reading file..., Please check...",! G EX2
68 F C0CCOUNT=1:1 Q:$$STATUS^%ZISH D
69 . U IO
70 . N LINE R LINE
71 . IF $$STATUS^%ZISH QUIT
72 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 1000
73 . IF LINE'["NDC|RXNORM" QUIT
74 . ; Otherwise, we are good to go
75 . N RXCUI,NDC ; Fileman fields below
76 . S RXCUI=$P(LINE,"|",1) ; .01
77 . S NDC=$P(LINE,"|",11) ; 2
78 . ; Using classic call to update.
79 . N DIC,X,DA,DR
80 . K DO
81 . S DIC="^C0CRXN(176.002,",DIC(0)="F",X=RXCUI,DIC("DR")="2////"_NDC
82 . D FILE^DICN
83 . I Y<1 U $P W !,"THERE IS TROUBLE IN RIVER CITY",! G EX2
84EX2 D CLOSE^%ZISH("FILE")
85 QUIT
86READSRC(PATH) ; Open the read RxNorm Sources file: RXNSAB.RRF
87 I PATH="" QUIT
88 N FILENAME S FILENAME="RXNSAB.RRF"
89 D DELFILED(176.003) ; delete data
90 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")
91 IF POP W "Error reading file..., Please check...",! G EX3
92 F I=1:1 Q:$$STATUS^%ZISH D
93 . U IO
94 . N LINE R LINE
95 . IF $$STATUS^%ZISH QUIT
96 . U $P W I,! U IO ; Write I to the screen, then go back to reading the file
97 . N VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,SCIT ; Fileman fields numbers below
98 . S VCUI=$P(LINE,"|",1) ; .01
99 . S RCUI=$P(LINE,"|",2) ; 2
100 . S VSAB=$P(LINE,"|",3) ; 3
101 . S RSAB=$P(LINE,"|",4) ; 4
102 . S SON=$P(LINE,"|",5) ; 5
103 . S SF=$P(LINE,"|",6) ; 6
104 . S SVER=$P(LINE,"|",7) ; 7
105 . S SCIT=$P(LINE,"|",25) ; 25
106 . ; Remove embedded "^"
107 . S SCIT=$TR(SCIT,"^")
108 . ; Convert SCIT into an array of 80 characters on each line
109 . ; In each line, chop 80 characters off, reset SCIT to be the rest
110 . N SCITLINE S SCITLINE=$L(SCIT)\80+1
111 . F J=1:1:SCITLINE S SCIT(J)=$E(SCIT,1,80) S SCIT=$E(SCIT,81,$L(SCIT))
112 . ; Now, construct the FDA array
113 . N RXNFDA
114 . S RXNFDA(176.003,"+"_I_",",.01)=VCUI
115 . S RXNFDA(176.003,"+"_I_",",2)=RCUI
116 . S RXNFDA(176.003,"+"_I_",",3)=VSAB
117 . S RXNFDA(176.003,"+"_I_",",4)=RSAB
118 . S RXNFDA(176.003,"+"_I_",",5)=SON
119 . S RXNFDA(176.003,"+"_I_",",6)=SF
120 . S RXNFDA(176.003,"+"_I_",",7)=SVER
121 . D UPDATE^DIE("","RXNFDA")
122 . I $D(^TMP("DIERR",$J)) U $P W "ERR" G EX
123 . ; Now, file WP field SCIT
124 . D WP^DIE(176.003,I_",",25,,$NA(SCIT))
125EX3 D CLOSE^%ZISH("FILE")
126 Q
127
Note: See TracBrowser for help on using the repository browser.