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

PXKWSRCH.m

Go to the documentation of this file.
  1. PXKWSRCH ;SLC/PKR - Keyword search routines. ;02/24/2016
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**211**;Aug 12, 1996;Build 454
  1. ;
  1. ;=====================================
  1. CASESEN() ;Ask the user if the search is case sensitive.
  1. N DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
  1. S DIR(0)="YA"
  1. S DIR("A")="Should the search be case-sensitive? "
  1. S DIR("B")="N"
  1. D ^DIR
  1. I $D(DIRUT) S Y="^"
  1. Q Y
  1. ;
  1. ;=====================================
  1. DISPLAY(CASESEN,NKW,KEYWORD) ;Display the search results.
  1. N ENAME,FIELD,FILENUM,FLABEL,FNUM,GNAME,GNAMELST,IEN,IENS,IND
  1. N LABEL,LN,NIEN,NL,NM,TEMP,TEXT
  1. S NL=0
  1. S NL=NL+1,TEXT(NL)="The search was for the following keywords:"
  1. F IND=1:1:NKW S NL=NL+1,TEXT(NL)=" "_KEYWORD(IND)
  1. S FILENUM=""
  1. F S FILENUM=$O(^TMP($J,"KWS",FILENUM)) Q:FILENUM="" D
  1. . S GNAME=$$GET1^DID(FILENUM,"","","NAME")
  1. . S GNAMELST(GNAME,FILENUM)=""
  1. S GNAME=""
  1. F S GNAME=$O(GNAMELST(GNAME)) Q:GNAME="" D
  1. . I NL>1 S NL=NL+1,TEXT(NL)=""
  1. . S NL=NL+1,TEXT(NL)="File: "_GNAME
  1. . S FILENUM=$O(GNAMELST(GNAME,FILENUM))
  1. . S IEN="",NIEN=0
  1. . F S IEN=$O(^TMP($J,"KWS",FILENUM,IEN)) Q:IEN="" D
  1. .. S ENAME=$$GET1^DIQ(FILENUM,IEN,.01)
  1. .. S NIEN=NIEN+1
  1. .. I NIEN>1 S NL=NL+1,TEXT(NL)=""
  1. .. S NM=^TMP($J,"KWS",FILENUM,IEN)
  1. .. S NL=NL+1,TEXT(NL)=" Entry "_ENAME_" (IEN="_IEN_") contains "_NM_" match"_$S(NM>1:"es.",1:".")
  1. .. S FNUM=""
  1. .. F S FNUM=$O(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM)) Q:FNUM="" D
  1. ... S IENS=""
  1. ... F S IENS=$O(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS)) Q:IENS="" D
  1. .... S FIELD=""
  1. .... F S FIELD=$O(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD)) Q:FIELD="" D
  1. ..... I '$D(FLABEL(FNUM,FIELD)) S FLABEL(FNUM,FIELD)=$$FLABEL(FNUM,FIELD)
  1. ..... S NL=NL+1,TEXT(NL)=" Found in field "_FLABEL(FNUM,FIELD)_" the text is:"
  1. ..... S TEMP=$G(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD))
  1. ..... I TEMP'="" S NL=NL+1,TEXT(NL)=" "_$$HLITE(TEMP,CASESEN)
  1. ..... S LN=0
  1. ..... F S LN=$O(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD,LN)) Q:LN="" D
  1. ...... S TEMP=$G(^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD,LN))
  1. ...... I TEMP'="" S NL=NL+1,TEXT(NL)=" "_$$HLITE(TEMP,CASESEN)
  1. I NL=(NKW+1) S NL=NL+1,TEXT(NL)="No matches were found."
  1. D BROWSE^DDBR("TEXT","ANR","Text/Keyword Search")
  1. K ^TMP($J,"KWS"),^TMP($J,"KWSIEN")
  1. Q
  1. ;
  1. ;=====================================
  1. FLABEL(FNUM,FIELD) ;Return the label for a field.
  1. N DATA
  1. D FIELD^DID(FNUM,FIELD,"N","LABEL","DATA")
  1. Q DATA("LABEL")
  1. ;
  1. ;=====================================
  1. GETFLIST(NSFILE,SFILE) ;Get the list of files to search.
  1. N DIR,DIRUT,DIROUT,DTOUT,DUOUT,FLIST,IND,LNUM,NFILES,X,Y
  1. S FLIST(1)="1. ^Education Topics^9999999.09^AUTTEDT"
  1. S FLIST(2)="2. ^Exam^9999999.15^AUTTEXAM"
  1. S FLIST(3)="3. ^Health Factors^9999999.64^AUTTHF"
  1. S FLIST(4)="4. ^Immunizations^9999999.14^AUTTIMM"
  1. S FLIST(5)="5. ^Skin Test^9999999.28^AUTTSK"
  1. S DIR(0)="LA^1:5"
  1. S DIR("A")="Select the files to search: "
  1. F IND=1:1:5 S DIR("A",IND)=$P(FLIST(IND),U,1)_$P(FLIST(IND),U,2)
  1. D EN^DDIOL("Select from the following list of files:")
  1. D ^DIR
  1. I Y["^"!$G(DIROUT) S NSFILE=0 Q
  1. S NSFILE=$L(Y,",")-1
  1. F IND=1:1:NSFILE D
  1. . S LNUM=$P(Y,",",IND)
  1. . S SFILE(IND)=$P(FLIST(LNUM),U,2,4)
  1. Q
  1. ;
  1. ;=====================================
  1. GETKWS(CASESEN,NKW,KEYWORD) ;Have the user input the key words.
  1. N DIR,DIRUT,DIROUT,DTOUT,DUOUT,X,Y
  1. S NKW=0
  1. D EN^DDIOL("Input the keywords, one per line. Enter NULL or '^' to exit.")
  1. S DIR(0)="FAOU^2:45"
  1. S DIR("A")="Input a keyword: "
  1. S DONE=0
  1. F Q:DONE D
  1. . D ^DIR
  1. . I (Y="^")!(Y="")!$G(DIROUT) S DONE=1 Q
  1. . S NKW=NKW+1
  1. . S KEYWORD(NKW)=$S(CASESEN:Y,1:$$UP^XLFSTR(Y))
  1. Q
  1. ;
  1. ;=====================================
  1. GSEARCH ;Entry point for general selection of global to search.
  1. N CASESEN,DIC,FILENUM,FNAME,GBL,IEN,KEYWORD,NKW,X,Y
  1. ;Prompt the user for the file that want to search.
  1. S DIC=1,DIC(0)="AEMNV"
  1. S DIC("A")="Select a file to search: "
  1. D ^DIC
  1. I Y=-1 Q
  1. S FILENUM=$P(Y,U,1)
  1. S FNAME=$P(Y,U,2)
  1. S GBL=$$GET1^DID(FILENUM,"","","GLOBAL NAME")
  1. S GBL=$$CREF^DILF(GBL)
  1. ;Prompt for case-sensitive.
  1. S CASESEN=$$CASESEN
  1. I CASESEN["^" Q
  1. ;Get the list of keywords.
  1. D GETKWS(CASESEN,.NKW,.KEYWORD)
  1. I NKW=0 Q
  1. K ^TMP($J,"KWS"),^TMP($J,"KWSIEN")
  1. D EN^DDIOL("Searching "_FNAME_" ...")
  1. S IEN=0
  1. F S IEN=+$O(@GBL@(IEN)) Q:IEN=0 D SRCHTEXT(FILENUM,IEN,CASESEN,NKW,.KEYWORD)
  1. D DISPLAY(CASESEN,NKW,.KEYWORD)
  1. Q
  1. ;
  1. ;=====================================
  1. HLITE(TEXT,CASESEN) ;Mark the keyword so it will be highlighted in the Browser.
  1. N FIND,KEYWORD,HTEXT,LKW,MKEY,MTEXT,START,STOP,TAG,TAGBEG,TAGEND,TTEXT
  1. S TTEXT=$P(TEXT,U,1)
  1. S MTEXT=$S(CASESEN:TTEXT,1:$$UP^XLFSTR(TTEXT))
  1. S KEYWORD=$P(TEXT,U,2)
  1. S MKEY=$S(CASESEN:KEYWORD,1:$$UP^XLFSTR(KEYWORD))
  1. S LKW=$L(KEYWORD)
  1. S FIND=1,HTEXT="",START=1
  1. F Q:FIND=0 D
  1. . S FIND=$F(MTEXT,MKEY,FIND)
  1. . I FIND=0 Q
  1. . S TAGBEG=FIND-LKW
  1. . S TAGEND=FIND-1
  1. . S STOP=TAGEND-LKW
  1. . S TAG="$.%^"_$E(TTEXT,TAGBEG,TAGEND)_"$.%"
  1. . S HTEXT=HTEXT_$E(TTEXT,START,STOP)_TAG
  1. . S START=FIND
  1. S HTEXT=HTEXT_$E(TTEXT,START,$L(TTEXT))
  1. Q HTEXT
  1. ;
  1. ;=====================================
  1. N CASESEN,FILENUM,FNAME,IEN,IND,KEYWORD,NKW,NSFILE,SFILE
  1. D EN^DDIOL("Search PCE files for keywords.")
  1. ;Get the list of files to search.
  1. D GETFLIST(.NSFILE,.SFILE)
  1. I NSFILE=0 Q
  1. ;Prompt for case-sensitive.
  1. S CASESEN=$$CASESEN
  1. I CASESEN["^" Q
  1. ;Get the list of keywords.
  1. D GETKWS(CASESEN,.NKW,.KEYWORD)
  1. I NKW=0 Q
  1. K ^TMP($J,"KWS"),^TMP($J,"KWSIEN")
  1. F IND=1:1:NSFILE D
  1. . S FNAME=$P(SFILE(IND),U,1)
  1. . S FILENUM=$P(SFILE(IND),U,2)
  1. . S GBL="^"_$P(SFILE(IND),U,3)
  1. . D EN^DDIOL("Searching "_FNAME_" ...")
  1. . S IEN=0
  1. . F S IEN=+$O(@GBL@(IEN)) Q:IEN=0 D SRCHTEXT(FILENUM,IEN,CASESEN,NKW,.KEYWORD)
  1. D DISPLAY(CASESEN,NKW,.KEYWORD)
  1. Q
  1. ;
  1. ;=====================================
  1. SRCHTEXT(FILENUM,IEN,CASESEN,NKW,KEYWORD) ;Search the text of an entry.
  1. N DIQOUT,IENS,IND,FIELD,FNUM,LABEL,LN,MSG,MTEMP,NM,TEMP
  1. D GETS^DIQ(FILENUM,IEN,"**","N","DIQOUT","MSG")
  1. S FNUM="",NM=0
  1. F S FNUM=$O(DIQOUT(FNUM)) Q:FNUM="" D
  1. . S IENS=""
  1. . F S IENS=$O(DIQOUT(FNUM,IENS)) Q:IENS="" D
  1. .. S FIELD=""
  1. .. F S FIELD=$O(DIQOUT(FNUM,IENS,FIELD)) Q:FIELD="" D
  1. ... S TEMP=DIQOUT(FNUM,IENS,FIELD)
  1. ... S MTEMP=$S(CASESEN:TEMP,1:$$UP^XLFSTR(TEMP))
  1. ... F IND=1:1:NKW I MTEMP[KEYWORD(IND) D
  1. .... S ^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD)=TEMP_U_KEYWORD(IND)
  1. .... S NM=NM+1
  1. ... S LN=""
  1. ... F S LN=$O(DIQOUT(FNUM,IENS,FIELD,LN)) Q:LN="" D
  1. .... ;S TEMP=DIQOUT(FNUM,IENS,FIELD)
  1. .... S TEMP=DIQOUT(FNUM,IENS,FIELD,LN)
  1. .... S MTEMP=$S(CASESEN:TEMP,1:$$UP^XLFSTR(TEMP))
  1. .... F IND=1:1:NKW I MTEMP[KEYWORD(IND) D
  1. ..... S ^TMP($J,"KWSIEN",FILENUM,IEN,FNUM,IENS,FIELD,LN)=TEMP_U_KEYWORD(IND)
  1. ..... S NM=NM+1
  1. I NM>0 S ^TMP($J,"KWS",FILENUM,IEN)=NM
  1. Q
  1. ;