主题:从文件中搜索关键字(修改后重发)
1. 根据内存空间动态处理数据块
2. 为方便操纵append文件,改由从文件末起搜索
s1&: 上一个位置
f$: 文件名
a$: 目标关键字
FUNCTION seach$ (s1&, f$, a$)
ddlong& = FRE(" ") \ 2 - 20
IF ddlong& > 32767 THEN ddlong& = 32767
La& = LEN(a$)
fl& = ddlong& - La& + 1
if fl&<1 then
print "内存严重不足"
exit function
endif
fr% = FREEFILE
OPEN f$ FOR BINARY AS #fr%
s0& = s1& '加入长文件从后面起找的顺序
s1& = 0
ddlong2& = ddlong&
IF s0& = 0 THEN s0& = LOF(fr%)
DO
s$ = "" '目的是减少空间占用
s0& = s0& - fl&
IF s0& < 1 THEN
ddlong2& = ddlong2& + s0& - 1
s0& = 1
END IF
SEEK #fr%, s0&
s$ = INPUT$(ddlong2&, fr%)
s2& = INSTR(s$, a$)
IF s2& > 0 THEN
DO UNTIL INSTR(s2& + 1, s$, a$) = 0
s2& = INSTR(s2& + 1, s$, a$)
LOOP
s1& = s0& + s2& - 1
SEEK #fr%, s1&
s$ = ""
s$ = INPUT$(ddlong&, fr%)
s2& = INSTR(s$, CHR$(13) + CHR$(10))
IF s2& > 0 THEN s$ = LEFT$(s$, s2& - 1)
seach$ = s$
s$ = ""
EXIT DO
END IF
LOOP UNTIL s0& = 1
CLOSE #fr%
END FUNCTION
2. 为方便操纵append文件,改由从文件末起搜索
s1&: 上一个位置
f$: 文件名
a$: 目标关键字
FUNCTION seach$ (s1&, f$, a$)
ddlong& = FRE(" ") \ 2 - 20
IF ddlong& > 32767 THEN ddlong& = 32767
La& = LEN(a$)
fl& = ddlong& - La& + 1
if fl&<1 then
print "内存严重不足"
exit function
endif
fr% = FREEFILE
OPEN f$ FOR BINARY AS #fr%
s0& = s1& '加入长文件从后面起找的顺序
s1& = 0
ddlong2& = ddlong&
IF s0& = 0 THEN s0& = LOF(fr%)
DO
s$ = "" '目的是减少空间占用
s0& = s0& - fl&
IF s0& < 1 THEN
ddlong2& = ddlong2& + s0& - 1
s0& = 1
END IF
SEEK #fr%, s0&
s$ = INPUT$(ddlong2&, fr%)
s2& = INSTR(s$, a$)
IF s2& > 0 THEN
DO UNTIL INSTR(s2& + 1, s$, a$) = 0
s2& = INSTR(s2& + 1, s$, a$)
LOOP
s1& = s0& + s2& - 1
SEEK #fr%, s1&
s$ = ""
s$ = INPUT$(ddlong&, fr%)
s2& = INSTR(s$, CHR$(13) + CHR$(10))
IF s2& > 0 THEN s$ = LEFT$(s$, s2& - 1)
seach$ = s$
s$ = ""
EXIT DO
END IF
LOOP UNTIL s0& = 1
CLOSE #fr%
END FUNCTION