10 Rem ----
Animesh Tripathy --- Rachel Carson Middle School -----
20 Rem ---- ACSL
Junior Divison Contest 2 ------------------------
30 Print
"Enter Search data : "
40 Line input
SearchDataLine$:SearchDataLine$=Upper$(SearchDataLine$)
50 L=len(SearchDataLine$)
60 GOSUB 1000
70 REM Search
starts here
80
LineCntr=1 'Line number, increases after
each entry until LineCntr=5
90 While
LineCntr<=5 'Total # of lines
100 Print
"Enter Search String : "
110 Line input
SearchString$:SearchString$=Upper$(SearchString$) 'String with command to
search
120 GOSUB 2000
130
LineCntr=LineCntr+1 'Next line's number until after line 5
140 Wend
150 End
1000 REM Split
words from Search Data Line
1010 I=1:J=1:K=1
1020
Word$=""
1030 For I = 1 TO
L
1040 TmpChar$=MID$(SearchDataLine$,I,1)
1050 IF
TmpChar$="," THEN GOSUB 1500 ELSE Word$=Word$+TmpChar$
1060 NEXT I
1070
SearchData$(K)=Word$
1080 For K=1 TO 4
1090
TmpWord$=SearchData$(K):WordLength=len(TmpWord$)
1100 FOR I=1 TO
WordLength
1110 IF
MID$(TmpWord$,I,1) <> " " THEN
WordStartPos=I:SearchData$(K)=MID$(TmpWord$,I,WordLength):I=WordLength
1120 NEXT I
1130 NEXT K
1140 RETURN
1500 REM Store
Search data
1510
SearchData$(K)=Word$
1520
Word$=""
1530 J=I+1
1540 K=K+1
1550 RETURN
2000 REM Construct
Pattern to Search
2010
StarPos=Instr(SearchString$,"*") 'position of asterisk
2020
QuesPos=Instr(SearchString$,"?") 'position of question mark
2030 IF StarPos=0
AND QuesPos=0 THEN GOSUB 5000
2040 IF
StarPos>0 AND QuesPos=0 THEN GOSUB 6000
2050 IF StarPos=0
AND QuesPos>0 THEN GOSUB 7000
2060 IF
StarPos>0 AND QuesPos>0 THEN GOSUB 8000
2070
OutputString$=RIGHT$(OutputString$,len(OutputString$)-2)
2080 IF
Len(OutputString$)=0 THEN PRINT "No Match" ELSE PRINT OutputString$
2090 RETURN
5000 REM No * and
No ?
5010
OutputString$=""
5020 FOR K=1 TO 4
5030 IF
SearchString$=SearchData$(K) THEN OutputString$=OutputString$+",
"+SearchData$(K)
5040 NEXT K
5050 RETURN
6000 REM Yes *
and No ?
6010
OutputString$=""
6020
L=len(SearchString$)
6030 IF StarPos=1
THEN SString$=RIGHT$(SearchString$,L-1)
6040 IF StarPos=L
THEN SString$=LEFT$(SearchString$,StarPos-1)
6050 FOR K=1 TO 4
6060 IF StarPos=1
AND SString$=RIGHT$(SearchData$(K),len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
6070 IF StarPos=L
AND SString$=LEFT$(SearchData$(K),len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
6080 NEXT K
6090 RETURN
7000 REM No * and
Yes ?
7010
OutputString$=""
7020
L=len(SearchString$)
7030 IF QuesPos=1
THEN GOSUB 7500
7040 IF QuesPos=L
THEN GOSUB 7600
7050 IF
QuesPos>1 AND QuesPos<L THEN GOSUB 7700
7060 RETURN
7500 REM No * and
Yes ? - QuesPos at the beginning
7510
SString$=RIGHT$(SearchString$,L-1)
7520 FOR K=1 TO 4
7530 IF
len(SString$)=len(SearchData$(K))-1 AND
SString$=RIGHT$(SearchData$(K),len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
7540 NEXT K
7550 RETURN
7600 REM No * and
Yes ? - QuesPos at the End
7610
SString$=LEFT$(SearchString$,L-1)
7620 FOR K=1 TO 4
7630 IF
Len(SString$)=len(SearchData$(K))-1 AND
SString$=LEFT$(SearchData$(K),len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
7640 NEXT K
7650 RETURN
7700 REM No * and
Yes ? - QuesPos anywhereelse
7710
SString$=LEFT$(SearchString$,L-1):SString1$=LEFT$(SearchString$,QuesPos-1):SString2$=RIGHT$(SearchString$,L-QuesPos)
7720 FOR K=1 TO 4
7730 IF
Len(SString$)=len(SearchData$(K))-1 AND
SString1$=LEFT$(SearchData$(K),len(SString1$)) AND
SString2$=RIGHT$(SearchData$(K),len(SString2$))THEN OutputString$=OutputString$+",
"+SearchData$(K)
7740 NEXT K
7750 RETURN
8000 REM Yes *
and Yes ?
8010
OutputString$=""
8020
L=len(SearchString$)
8030 IF StarPos=1
AND QuesPos=L THEN GOSUB 8500
8040 IF StarPos=L
AND QuesPos=1 THEN GOSUB 8600
8050 IF StarPos=1
AND QuesPos>1 AND QuesPos<L THEN GOSUB 8700
8060 IF StarPos=L
AND QuesPos>1 AND QuesPos<L THEN GOSUB 8800
8070 RETURN
8500 REM Yes *
and Yes ? - StarPos at the beginning and QuesPos at the end
8510
SString$=MID$(SearchString$,2,L-2)
8520 FOR K=1 TO 4
8530 IF
SString$=RIGHT$(LEFT$(SearchData$(K),len(SearchData$(K))-1),len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
8540 NEXT K
8550 RETURN
8600 REM Yes *
and Yes ? - QuesPos at the beginning and StarPos at the end
8610 SString$=MID$(SearchString$,2,L-2)
8620 FOR K=1 TO 4
8630 IF
SString$=MID$(SearchData$(K),2,len(SString$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
8640 NEXT K
8650 RETURN
8700 REM Yes *
and Yes ? - StarPos at the beginning and QuesPos anywhereelse
8710
SString1$=MID$(SearchString$,2,QuesPos-2):SString2$=MID$(SearchString$,QuesPos+1,L)
8720 FOR K=1 TO 4
8730 IF
SString1$=MID$(SearchData$(K),len(SearchData$(K))-len(SString2$)-1,len(SString1$))
AND SString2$=RIGHT$(SearchData$(K),len(SString2$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
8740 NEXT K
8750 RETURN
8800 REM Yes *
and Yes ? - StarPos at the end and QuesPos anywhereelse
8810
SString1$=LEFT$(SearchString$,QuesPos-1):SString2$=MID$(SearchString$,QuesPos+1,StarPos-QuesPos-1)
8820 FOR K=1 TO 4
8830 IF
SString1$=LEFT$(SearchData$(K),len(SString1$)) AND
SString2$=MID$(SearchData$(K),QuesPos+1,len(SString2$)) THEN
OutputString$=OutputString$+", "+SearchData$(K)
8840 NEXT K
8850 RETURN