a console program to find keywords, display them, then allow you to view the whole file and return back to the point in the search before viewing the whole file.
notepad is the program used to view the whole file or it can be edited with a binary editor
a tool to search a file or files using a wild card in a single directory using up to 4 keywords with the first keyword being a primary keyword.
program will find and display 13 lines of a file with the line in middle being the line which holds the primary keyword.
if additional keywords are given in the search, up to 3 of them, the results of the search will be where the additional keywords are up to 6 lines away from the primary keyword.
option to pick where the additional keywords must be found.
all keywords on a single line
or
the line on which the primary keyword is found and any line 6 lines before
the line on which the primary keyword is found and any line 6 lines after
the line on which the primary keyword is found and any line 6 lines before and 6 lines after.
all keywords entered must be found for a match to be made.
i added some code to the program while placing this thread, program should work
discussion/addition information
notepad is the program used to view the whole file or it can be edited with a binary editor
a tool to search a file or files using a wild card in a single directory using up to 4 keywords with the first keyword being a primary keyword.
program will find and display 13 lines of a file with the line in middle being the line which holds the primary keyword.
if additional keywords are given in the search, up to 3 of them, the results of the search will be where the additional keywords are up to 6 lines away from the primary keyword.
option to pick where the additional keywords must be found.
all keywords on a single line
or
the line on which the primary keyword is found and any line 6 lines before
the line on which the primary keyword is found and any line 6 lines after
the line on which the primary keyword is found and any line 6 lines before and 6 lines after.
all keywords entered must be found for a match to be made.
i added some code to the program while placing this thread, program should work
discussion/addition information
Code:
'compiled with pbcc40 #COMPILE EXE '#DIM ALL GLOBAL FILELISTING() AS STRING GLOBAL LASTFILEINARRAY AS LONG FUNCTION PBMAIN () AS LONG FILETOSEARCH$=TRIM$(COMMAND$) IF FILETOSEARCH$="" THEN STDOUT "place the file name or wildcards names on the command line" GOTO FINISH2 END IF TEMP$=DIR$(FILETOSEARCH$) IF TEMP$="" THEN STDOUT "no files found to search text in" GOTO FINISH2 END IF DIM FILELISTING(1 TO 20000) LASTFILEINARRAY=1& FILELISTING(1&)=TEMP$ FOR I&=2 TO 20000 FILELISTING(I&)=DIR$ IF FILELISTING(I&)="" THEN EXIT FOR LASTFILEINARRAY=I& NEXT I& IF I&=20000 THEN STDOUT "this program is limited to 20000 files CONSOLE SCREEN 26,120 CONSOLE SET SCREEN 18,120 CONSOLE SET VIRTUAL 26, 500 START: DIM FILELINE$(14) COLOR 15,0 CLS STDOUT "search files "+FILETOSEARCH$ STDOUT "Matching of a primary key, can be with the secondary keys on the same line or upto 6 lines near the primary key" GOTO QSTRING START1: CLS STDOUT "the last keywords searched" STDOUT "primary :"+A$ STDOUT "second :"+B$ STDOUT "third :"+C$ STDOUT "fourth :"+D$ QSTRING: LOCATE 6,1 A$="" B$="" C$="" D$="" M$="Y" M&=0 INPUT LINE "Additional keywords on lines .Same.Near.Before.After: ",M$ IF LEFT$(UCASE$(TRIM$(M$)),1)="S" THEN M&=1& IF LEFT$(UCASE$(TRIM$(M$)),1)="N" THEN M&=2& IF LEFT$(UCASE$(TRIM$(M$)),1)="B" THEN M&=3& IF LEFT$(UCASE$(TRIM$(M$)),1)="A" THEN M&=4& IF LEFT$(UCASE$(TRIM$(M$)),1)="Q" THEN GOTO FINISH2 IF LEFT$(UCASE$(TRIM$(M$)),1)="" THEN GOTO FINISH2 IF M&=0 THEN GOTO QSTRING LOCATE 6,1 STDOUT SPACE$(80); LOCATE 1,45 IF M&=1 THEN STDOUT "secondary matching is only on the same line"; IF M&=2 THEN STDOUT "secondary matching is same line and/or 6 lines nearby"; IF M&=3 THEN STDOUT "secondary matching is same line and/or 6 lines before"; IF M&=4 THEN STDOUT "secondary matching is same line and/or 6 lines after"; LOCATE 6,1 INPUT LINE "Primary string to search: ",A$ IF TRIM$(A$)="" GOTO FINISH INPUT LINE " 2nd string to search: ",B$ IF TRIM$(B$)="" GOTO STARTSEARCH INPUT LINE " 3rd string to search: ",C$ IF TRIM$(C$)="" GOTO STARTSEARCH INPUT LINE " 4th string to search: ",D$ IF TRIM$(D$)="" GOTO STARTSEARCH STARTSEARCH: ON ERROR RESUME NEXT FOR I&=1 TO LASTFILEINARRAY& MATCH&=0& ERRCLEAR FILEOPEN&=0& TEMP$=FILELISTING(I&) OPEN TEMP$ FOR INPUT AS #1 LEN=16000 IF ERR THEN GOTO AROUND FILEOPEN&=1& AFTERENDOFFILE&=0& REDIM FILELINE$(14) LINECOUNT&=0 ERRCLEAR LINE INPUT #1,FILELINE$ WHILE ISFALSE EOF(1) ENDOFFILEVIEW: IF FILEOPEN&=1& THEN READANOTHERLINE: LINE INPUT #1,FILELINE$(14) INCR LINECOUNT& ' IF TRIM$(FILELINE$(14))="" THEN PRINT "EMPTY LINE":GOTO READANOTHERLINE ELSE INCR AFTERENDOFFILE& FILELINE$(14)="" END IF FOR J&=1 TO 14 SWAP FILELINE$(J&), FILELINE$(J&-1&) NEXT J& IF INSTR(" "+UCASE$(FILELINE$(7)),UCASE$(A$))>0 THEN MATCH&=1& ELSE GOTO AROUND2 END IF TEMPSTRING$=" " IF M&=1& THEN TEMPSTRING$=TEMPSTRING$+UCASE$(FILELINE$(7&)) 'all matching must be on same line END IF IF M&=2& THEN FOR J&=1 TO 13 TEMPSTRING$=TEMPSTRING$+UCASE$(FILELINE$(J&)) 'matching can be on all 13 mulitple lines NEXT J& END IF IF M&=3& THEN FOR J&=1 TO 7& TEMPSTRING$=TEMPSTRING$+UCASE$(FILELINE$(J&)) 'matching can be on same line and 6 lines before NEXT J& END IF IF M&=4& THEN FOR J&=7 TO 13& TEMPSTRING$=TEMPSTRING$+UCASE$(FILELINE$(J&)) 'matching can be on same line and 6 lines after NEXT J& END IF IF B$<>"" THEN IF INSTR(TEMPSTRING$,UCASE$(B$))=0 THEN MATCH&=0& END IF IF C$<>"" THEN IF INSTR(TEMPSTRING$,UCASE$(C$))=0 THEN MATCH&=0& END IF IF D$<>"" THEN IF INSTR(TEMPSTRING$,UCASE$(D$))=0 THEN MATCH&=0& END IF IF MATCH&=0& THEN GOTO AROUND2 ANSWER: LOCATE 11,1 STDOUT SPACE$(499); LOCATE 11,1 STDOUT TEMP$+" match found near line"+STR$(linecount&-5&); LOCATE 26,1 STDOUT SPACE$(499); FOR J&=1 TO 13 LOCATE 12&+J&,1 STDOUT SPACE$(500); LOCATE 12&+J&,1 BLANK$=" " COLOR 15,0 IF (J&<7 AND M&=2) OR (J&<7 AND M&=3)THEN IF TRIM$(B$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(B$)) THEN COLOR 14,0 IF TRIM$(C$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(C$)) THEN COLOR 14,0 IF TRIM$(D$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(D$)) THEN COLOR 14,0 IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(A$)) THEN COLOR 14,0 END IF IF (J&>7 AND M&=2) OR (J&>7 AND M&=4) THEN IF TRIM$(B$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(B$)) THEN COLOR 14,0 IF TRIM$(C$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(C$)) THEN COLOR 14,0 IF TRIM$(D$)<>"" THEN IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(D$)) THEN COLOR 14,0 IF INSTR(" "+UCASE$(FILELINE$(J&)),UCASE$(A$)) THEN COLOR 14,0 END IF IF J&=7 THEN COLOR 10,0 STDOUT FILELINE$(J&); COLOR 15,0 NEXT J& CAVQUESTION: LOCATE 10,1 STDOUT " " LOCATE 10,1 INPUT LINE "Continue,Quit,View : ",YN$ YN$=UCASE$(TRIM$(YN$)) IF AFTERENDOFFILE&>0 THEN IF YN$="Q" THEN GOTO START1 END IF IF YN$="Q" THEN CLOSE 1:GOTO START1 IF YN$="C" THEN GOTO AROUND2 IF YN$="" THEN GOTO AROUND2 viewertouse$="NOTEPAD.EXE " viewertouse$=trim$(viewertouse$) IF AFTERENDOFFILE&>0 THEN IF YN$="V" THEN SHELL viewertouse$+" "+TEMP$ END IF IF AFTERENDOFFILE&=0 THEN IF YN$="V" THEN CLOSE 1:SHELL viewertouse$+" "+TEMP$ END IF IF YN$="V" THEN GOTO CAVQUESTION GOTO ANSWER AROUND2: IF AFTERENDOFFILE&>6 THEN GOTO AROUND: IF FILEOPEN&=0 THEN GOTO ENDOFFILEVIEW WEND CLOSE 1 FILEOPEN&=0& GOTO ENDOFFILEVIEW AROUND: NEXT I& GOTO START FINISH: CLS FINISH2: CONSOLE SCREEN 25, 80 END FUNCTION