回 帖 发 新 帖 刷新版面

主题:再提提=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

回复列表 (共2个回复)

沙发

过目!!!!!!!!!!!!!!

板凳


          行,值得欣赏。[em18][em12][em12]

我来回复

您尚未登录,请登录后再回复。点此登录或注册