Changeset 1428 for ccr/branches/ohum/p/C0CRXNRD.m
- Timestamp:
- May 11, 2012, 6:06:25 PM (14 years ago)
- File:
-
- 1 edited
-
ccr/branches/ohum/p/C0CRXNRD.m (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ccr/branches/ohum/p/C0CRXNRD.m
r1342 r1428 1 C0CRXNRD ; WV/SMH - CCR/CCD PROJECT: Routine to Read RxNorm files;11/15/082 ;;0.1;C0C;nopatch;noreleasedate;Build 2 3 W "No entry from top" Q4 IMPORT(PATH) 5 I PATH="" QUIT6 D READSRC(PATH),READCON(PATH),READNDC(PATH)7 QUIT8 ;9 DELFILED(FN) ; Delete file data; PEP procedure; only for RxNorm files10 ; FN is Filenumber passed by Value11 QUIT:$E(FN,1,3)'=176 ; Quit if not RxNorm files12 D CLEAN^DILF ; Clean FM variables13 N ROOT S ROOT=$$ROOT^DILFD(FN,"",1) ; global root14 N ZERO S ZERO=@ROOT@(0) ; Save zero node15 S $P(ZERO,U,3,9999)="" ; Remove entry # and last edited16 K @ROOT ; Kill the file -- so sad!17 S @ROOT@(0)=ZERO ; It riseth again!18 QUIT19 GETLINES(PATH,FILENAME) ; Get number of lines in a file20 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")21 U IO22 N I23 F I=1:1 R LINE Q:$$STATUS^%ZISH24 D CLOSE^%ZISH("FILE")25 Q I-126 READCON(PATH,INCRES) ; Open and read concepts file: RXNCONSO.RRF; EP27 ; PATH ByVal, path of RxNorm files28 ; INCRES ByVal, include restricted sources. 1 for yes, 0 for no29 I PATH="" QUIT30 S INCRES=+$G(INCRES) ; if not passed, becomes zero.31 N FILENAME S FILENAME="RXNCONSO.RRF"32 D DELFILED(176.001) ; delete data33 N LINES S LINES=$$GETLINES(PATH,FILENAME)34 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")35 IF POP D EN^DDIOL("Error reading file..., Please check...") G EX36 N C0CCOUNT37 F C0CCOUNT=1:1 D Q:$$STATUS^%ZISH38 . U IO39 . N LINE R LINE40 . IF $$STATUS^%ZISH QUIT41 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 100042 . N RXCUI,RXAUI,SAB,TTY,CODE,STR ; Fileman fields numbers below43 . S RXCUI=$P(LINE,"|",1) ; .0144 . S RXAUI=$P(LINE,"|",8) ; 145 . S SAB=$P(LINE,"|",12) ; 246 . ; If the source is a restricted source, decide what to do based on what's asked.47 . N SRCIEN S SRCIEN=$$FIND1^DIC(176.003,"","QX",SAB,"B") ; SrcIEN in RXNORM SOURCES file48 . N RESTRIC S RESTRIC=$$GET1^DIQ(176.003,SRCIEN,14,"I") ; 14 is restriction field; values 0-449 . ; If RESTRIC is zero, then it's unrestricted. Everything else is restricted.50 . ; If user didn't ask to include restricted sources, and the source is restricted, then quit51 . I 'INCRES,RESTRIC QUIT52 . S TTY=$P(LINE,"|",13) ; 353 . S CODE=$P(LINE,"|",14) ; 454 . S STR=$P(LINE,"|",15) ; 555 . ; Remove embedded "^"56 . S STR=$TR(STR,"^")57 . ; Convert STR into an array of 80 characters on each line58 . N STRLINE S STRLINE=$L(STR)\80+159 . ; In each line, chop 80 characters off, reset STR to be the rest60 . N J F J=1:1:STRLINE S STR(J)=$E(STR,1,80) S STR=$E(STR,81,$L(STR))61 . ; Now, construct the FDA array62 . N RXNFDA63 . S RXNFDA(176.001,"+1,",.01)=RXCUI64 . S RXNFDA(176.001,"+1,",1)=RXAUI65 . S RXNFDA(176.001,"+1,",2)=SAB66 . S RXNFDA(176.001,"+1,",3)=TTY67 . S RXNFDA(176.001,"+1,",4)=CODE68 . N RXNIEN S RXNIEN(1)=C0CCOUNT69 . D UPDATE^DIE("","RXNFDA","RXNIEN")70 . I $D(^TMP("DIERR",$J)) D EN^DDIOL("ERROR") G EX71 . ; Now, file WP field STR72 . D WP^DIE(176.001,C0CCOUNT_",",5,,$NA(STR))73 EX D CLOSE^%ZISH("FILE")74 QUIT75 READNDC(PATH) ; Open and read NDC/RxNorm/VANDF relationship file: RXNSAT.RRF76 I PATH="" QUIT77 N FILENAME S FILENAME="RXNSAT.RRF"78 D DELFILED(176.002) ; delete data79 N LINES S LINES=$$GETLINES(PATH,FILENAME)80 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")81 IF POP W "Error reading file..., Please check...",! G EX282 F C0CCOUNT=1:1 Q:$$STATUS^%ZISH D83 . U IO84 . N LINE R LINE85 . IF $$STATUS^%ZISH QUIT86 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 100087 . IF LINE'["NDC|RXNORM" QUIT88 . ; Otherwise, we are good to go89 . N RXCUI,NDC ; Fileman fields below90 . S RXCUI=$P(LINE,"|",1) ; .0191 . S NDC=$P(LINE,"|",11) ; 292 . ; Using classic call to update.93 . N DIC,X,DA,DR94 . K DO95 . S DIC="^C0CRXN(176.002,",DIC(0)="F",X=RXCUI,DIC("DR")="2////"_NDC96 . D FILE^DICN97 . I Y<1 U $P W !,"THERE IS TROUBLE IN RIVER CITY",! G EX298 EX2 D CLOSE^%ZISH("FILE")99 QUIT100 READSRC(PATH) ; Open the read RxNorm Sources file: RXNSAB.RRF101 I PATH="" QUIT102 N FILENAME S FILENAME="RXNSAB.RRF"103 D DELFILED(176.003) ; delete data104 D OPEN^%ZISH("FILE",PATH,FILENAME,"R")105 IF POP W "Error reading file..., Please check...",! G EX3106 F I=1:1 Q:$$STATUS^%ZISH D107 . U IO108 . N LINE R LINE109 . IF $$STATUS^%ZISH QUIT110 . U $P W I,! U IO ; Write I to the screen, then go back to reading the file111 . N VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,SRL,SCIT ; Fileman fields numbers below112 . S VCUI=$P(LINE,"|",1) ; .01113 . S RCUI=$P(LINE,"|",2) ; 2114 . S VSAB=$P(LINE,"|",3) ; 3115 . S RSAB=$P(LINE,"|",4) ; 4116 . S SON=$P(LINE,"|",5) ; 5117 . S SF=$P(LINE,"|",6) ; 6118 . S SVER=$P(LINE,"|",7) ; 7119 . S SRL=$P(LINE,"|",14) ; 14120 . S SCIT=$P(LINE,"|",25) ; 25121 . ; Remove embedded "^"122 . S SCIT=$TR(SCIT,"^")123 . ; Convert SCIT into an array of 80 characters on each line124 . ; In each line, chop 80 characters off, reset SCIT to be the rest125 . N SCITLINE S SCITLINE=$L(SCIT)\80+1126 . F J=1:1:SCITLINE S SCIT(J)=$E(SCIT,1,80) S SCIT=$E(SCIT,81,$L(SCIT))127 . ; Now, construct the FDA array128 . N RXNFDA129 . S RXNFDA(176.003,"+"_I_",",.01)=VCUI130 . S RXNFDA(176.003,"+"_I_",",2)=RCUI131 . S RXNFDA(176.003,"+"_I_",",3)=VSAB132 . S RXNFDA(176.003,"+"_I_",",4)=RSAB133 . S RXNFDA(176.003,"+"_I_",",5)=SON134 . S RXNFDA(176.003,"+"_I_",",6)=SF135 . S RXNFDA(176.003,"+"_I_",",7)=SVER136 . S RXNFDA(176.003,"+"_I_",",14)=SRL137 . D UPDATE^DIE("","RXNFDA")138 . I $D(^TMP("DIERR",$J)) U $P W "ERR" G EX139 . ; Now, file WP field SCIT140 . D WP^DIE(176.003,I_",",25,,$NA(SCIT))141 EX3 D CLOSE^%ZISH("FILE")142 Q143 1 C0CRXNRD ; WV/SMH - CCR/CCD PROJECT: Routine to Read RxNorm files;11/15/08 2 ;;1.2;C0C;;May 11, 2012;Build 46 3 W "No entry from top" Q 4 IMPORT(PATH) 5 I PATH="" QUIT 6 D READSRC(PATH),READCON(PATH),READNDC(PATH) 7 QUIT 8 ; 9 DELFILED(FN) ; Delete file data; PEP procedure; only for RxNorm files 10 ; FN is Filenumber passed by Value 11 QUIT:$E(FN,1,3)'=176 ; Quit if not RxNorm files 12 D CLEAN^DILF ; Clean FM variables 13 N ROOT S ROOT=$$ROOT^DILFD(FN,"",1) ; global root 14 N ZERO S ZERO=@ROOT@(0) ; Save zero node 15 S $P(ZERO,U,3,9999)="" ; Remove entry # and last edited 16 K @ROOT ; Kill the file -- so sad! 17 S @ROOT@(0)=ZERO ; It riseth again! 18 QUIT 19 GETLINES(PATH,FILENAME) ; Get number of lines in a file 20 D OPEN^%ZISH("FILE",PATH,FILENAME,"R") 21 U IO 22 N I 23 F I=1:1 R LINE Q:$$STATUS^%ZISH 24 D CLOSE^%ZISH("FILE") 25 Q I-1 26 READCON(PATH,INCRES) ; Open and read concepts file: RXNCONSO.RRF; EP 27 ; PATH ByVal, path of RxNorm files 28 ; INCRES ByVal, include restricted sources. 1 for yes, 0 for no 29 I PATH="" QUIT 30 S INCRES=+$G(INCRES) ; if not passed, becomes zero. 31 N FILENAME S FILENAME="RXNCONSO.RRF" 32 D DELFILED(176.001) ; delete data 33 N LINES S LINES=$$GETLINES(PATH,FILENAME) 34 D OPEN^%ZISH("FILE",PATH,FILENAME,"R") 35 IF POP D EN^DDIOL("Error reading file..., Please check...") G EX 36 N C0CCOUNT 37 F C0CCOUNT=1:1 D Q:$$STATUS^%ZISH 38 . U IO 39 . N LINE R LINE 40 . IF $$STATUS^%ZISH QUIT 41 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 1000 42 . N RXCUI,RXAUI,SAB,TTY,CODE,STR ; Fileman fields numbers below 43 . S RXCUI=$P(LINE,"|",1) ; .01 44 . S RXAUI=$P(LINE,"|",8) ; 1 45 . S SAB=$P(LINE,"|",12) ; 2 46 . ; If the source is a restricted source, decide what to do based on what's asked. 47 . N SRCIEN S SRCIEN=$$FIND1^DIC(176.003,"","QX",SAB,"B") ; SrcIEN in RXNORM SOURCES file 48 . N RESTRIC S RESTRIC=$$GET1^DIQ(176.003,SRCIEN,14,"I") ; 14 is restriction field; values 0-4 49 . ; If RESTRIC is zero, then it's unrestricted. Everything else is restricted. 50 . ; If user didn't ask to include restricted sources, and the source is restricted, then quit 51 . I 'INCRES,RESTRIC QUIT 52 . S TTY=$P(LINE,"|",13) ; 3 53 . S CODE=$P(LINE,"|",14) ; 4 54 . S STR=$P(LINE,"|",15) ; 5 55 . ; Remove embedded "^" 56 . S STR=$TR(STR,"^") 57 . ; Convert STR into an array of 80 characters on each line 58 . N STRLINE S STRLINE=$L(STR)\80+1 59 . ; In each line, chop 80 characters off, reset STR to be the rest 60 . N J F J=1:1:STRLINE S STR(J)=$E(STR,1,80) S STR=$E(STR,81,$L(STR)) 61 . ; Now, construct the FDA array 62 . N RXNFDA 63 . S RXNFDA(176.001,"+1,",.01)=RXCUI 64 . S RXNFDA(176.001,"+1,",1)=RXAUI 65 . S RXNFDA(176.001,"+1,",2)=SAB 66 . S RXNFDA(176.001,"+1,",3)=TTY 67 . S RXNFDA(176.001,"+1,",4)=CODE 68 . N RXNIEN S RXNIEN(1)=C0CCOUNT 69 . D UPDATE^DIE("","RXNFDA","RXNIEN") 70 . I $D(^TMP("DIERR",$J)) D EN^DDIOL("ERROR") G EX 71 . ; Now, file WP field STR 72 . D WP^DIE(176.001,C0CCOUNT_",",5,,$NA(STR)) 73 EX D CLOSE^%ZISH("FILE") 74 QUIT 75 READNDC(PATH) ; Open and read NDC/RxNorm/VANDF relationship file: RXNSAT.RRF 76 I PATH="" QUIT 77 N FILENAME S FILENAME="RXNSAT.RRF" 78 D DELFILED(176.002) ; delete data 79 N LINES S LINES=$$GETLINES(PATH,FILENAME) 80 D OPEN^%ZISH("FILE",PATH,FILENAME,"R") 81 IF POP W "Error reading file..., Please check...",! G EX2 82 F C0CCOUNT=1:1 Q:$$STATUS^%ZISH D 83 . U IO 84 . N LINE R LINE 85 . IF $$STATUS^%ZISH QUIT 86 . I '(C0CCOUNT#1000) U $P W C0CCOUNT," of ",LINES," read ",! U IO ; update every 1000 87 . IF LINE'["NDC|RXNORM" QUIT 88 . ; Otherwise, we are good to go 89 . N RXCUI,NDC ; Fileman fields below 90 . S RXCUI=$P(LINE,"|",1) ; .01 91 . S NDC=$P(LINE,"|",11) ; 2 92 . ; Using classic call to update. 93 . N DIC,X,DA,DR 94 . K DO 95 . S DIC="^C0CRXN(176.002,",DIC(0)="F",X=RXCUI,DIC("DR")="2////"_NDC 96 . D FILE^DICN 97 . I Y<1 U $P W !,"THERE IS TROUBLE IN RIVER CITY",! G EX2 98 EX2 D CLOSE^%ZISH("FILE") 99 QUIT 100 READSRC(PATH) ; Open the read RxNorm Sources file: RXNSAB.RRF 101 I PATH="" QUIT 102 N FILENAME S FILENAME="RXNSAB.RRF" 103 D DELFILED(176.003) ; delete data 104 D OPEN^%ZISH("FILE",PATH,FILENAME,"R") 105 IF POP W "Error reading file..., Please check...",! G EX3 106 F I=1:1 Q:$$STATUS^%ZISH D 107 . U IO 108 . N LINE R LINE 109 . IF $$STATUS^%ZISH QUIT 110 . U $P W I,! U IO ; Write I to the screen, then go back to reading the file 111 . N VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,SRL,SCIT ; Fileman fields numbers below 112 . S VCUI=$P(LINE,"|",1) ; .01 113 . S RCUI=$P(LINE,"|",2) ; 2 114 . S VSAB=$P(LINE,"|",3) ; 3 115 . S RSAB=$P(LINE,"|",4) ; 4 116 . S SON=$P(LINE,"|",5) ; 5 117 . S SF=$P(LINE,"|",6) ; 6 118 . S SVER=$P(LINE,"|",7) ; 7 119 . S SRL=$P(LINE,"|",14) ; 14 120 . S SCIT=$P(LINE,"|",25) ; 25 121 . ; Remove embedded "^" 122 . S SCIT=$TR(SCIT,"^") 123 . ; Convert SCIT into an array of 80 characters on each line 124 . ; In each line, chop 80 characters off, reset SCIT to be the rest 125 . N SCITLINE S SCITLINE=$L(SCIT)\80+1 126 . F J=1:1:SCITLINE S SCIT(J)=$E(SCIT,1,80) S SCIT=$E(SCIT,81,$L(SCIT)) 127 . ; Now, construct the FDA array 128 . N RXNFDA 129 . S RXNFDA(176.003,"+"_I_",",.01)=VCUI 130 . S RXNFDA(176.003,"+"_I_",",2)=RCUI 131 . S RXNFDA(176.003,"+"_I_",",3)=VSAB 132 . S RXNFDA(176.003,"+"_I_",",4)=RSAB 133 . S RXNFDA(176.003,"+"_I_",",5)=SON 134 . S RXNFDA(176.003,"+"_I_",",6)=SF 135 . S RXNFDA(176.003,"+"_I_",",7)=SVER 136 . S RXNFDA(176.003,"+"_I_",",14)=SRL 137 . D UPDATE^DIE("","RXNFDA") 138 . I $D(^TMP("DIERR",$J)) U $P W "ERR" G EX 139 . ; Now, file WP field SCIT 140 . D WP^DIE(176.003,I_",",25,,$NA(SCIT)) 141 EX3 D CLOSE^%ZISH("FILE") 142 Q 143
Note:
See TracChangeset
for help on using the changeset viewer.
