主题:再提提=input$(,)
年纪上来了
人也就哆嗦
连之前有没有说过都不记得了
我在很多地方都推荐使用=input$(,)
是因为它的速度够快,够简捷,
而且包含了QB中不定长字符串操作的优越性.
需要注意的有几个问题
1. 无论是用 for input 还是用 for binary 方式打开都可以用
都可以用 seek 来定位读入
2. 但用二进制文件方式不会有越尾现象出现,到文件尾了就会自己处理截尾
当用顺序文件方式的时候就会出错了,这种方式下好像是不可以超越文件尾的
3. 因为QB是运行在DOS模式下的,能处理的内存范围在640K以内,再东减西扣的
实际上可能还用不到那么多.当你定义的数组过多过大的时候,需要考虑一下空间问题
这16K看起来是小数目,实际上用起来可不一定小
按照帮助文档的说明,好像最大可以用到32K的,但我不知道怎么处理,只能用到16K
中间有什么误会,需要大家的指点.
4. 当用=input$(,)来在文件搜索目标字符串的时候,需要注意头尾之间的衔接
要考虑周全,避免问题出现,否则当关键词给分成了两半,前一半在前一串字符块
后一半在后一串字符块的时候,你用instr就当然找不出来了,
这个时候就需要特殊处理,既不遗漏,也不要重复
5. 我把一个我经常滥用的一个例程再重新发过来,希望初学的同学多练习使用.
FUNCTION seach$ (s1&, f$, a$) '从文件中查找字符串函数
La& = LEN(a$)
fl& = 16383 - La& + 1
fr% = FREEFILE
OPEN f$ FOR BINARY AS #fr%
IF s1& = 0 THEN s1& = 1
DO
SEEK #fr%, s1&
s$ = INPUT$(16383, fr%)
s2& = INSTR(s$, a$)
IF s2&>0 THEN
s1& = s1& + s2& - 1
seek #fr%,s1&
s$=INPUT$(16383, #fr%)
s3%=instr(s$,chr$(13)+chr$(10))
if s3%>0 then s$=left$(s$,s3%-1)
seach$=s$
EXIT DO
END IF
s1& = s1& + fl&
LOOP UNTIL EOF(fr%)
CLOSE #fr%
END FUNCTION
人也就哆嗦
连之前有没有说过都不记得了
我在很多地方都推荐使用=input$(,)
是因为它的速度够快,够简捷,
而且包含了QB中不定长字符串操作的优越性.
需要注意的有几个问题
1. 无论是用 for input 还是用 for binary 方式打开都可以用
都可以用 seek 来定位读入
2. 但用二进制文件方式不会有越尾现象出现,到文件尾了就会自己处理截尾
当用顺序文件方式的时候就会出错了,这种方式下好像是不可以超越文件尾的
3. 因为QB是运行在DOS模式下的,能处理的内存范围在640K以内,再东减西扣的
实际上可能还用不到那么多.当你定义的数组过多过大的时候,需要考虑一下空间问题
这16K看起来是小数目,实际上用起来可不一定小
按照帮助文档的说明,好像最大可以用到32K的,但我不知道怎么处理,只能用到16K
中间有什么误会,需要大家的指点.
4. 当用=input$(,)来在文件搜索目标字符串的时候,需要注意头尾之间的衔接
要考虑周全,避免问题出现,否则当关键词给分成了两半,前一半在前一串字符块
后一半在后一串字符块的时候,你用instr就当然找不出来了,
这个时候就需要特殊处理,既不遗漏,也不要重复
5. 我把一个我经常滥用的一个例程再重新发过来,希望初学的同学多练习使用.
FUNCTION seach$ (s1&, f$, a$) '从文件中查找字符串函数
La& = LEN(a$)
fl& = 16383 - La& + 1
fr% = FREEFILE
OPEN f$ FOR BINARY AS #fr%
IF s1& = 0 THEN s1& = 1
DO
SEEK #fr%, s1&
s$ = INPUT$(16383, fr%)
s2& = INSTR(s$, a$)
IF s2&>0 THEN
s1& = s1& + s2& - 1
seek #fr%,s1&
s$=INPUT$(16383, #fr%)
s3%=instr(s$,chr$(13)+chr$(10))
if s3%>0 then s$=left$(s$,s3%-1)
seach$=s$
EXIT DO
END IF
s1& = s1& + fl&
LOOP UNTIL EOF(fr%)
CLOSE #fr%
END FUNCTION