主题:请教获取文本文件的行数问题(问题较难)
zys
[专家分:0] 发布于 2005-07-20 17:15:00
假若有一文本文件A.txt,内容如下:(文件内容都是变化的,只有OK GOOD这一行是固定的)
.......
3 AA DDD
......
B KKK KKKK SS
OK GOOD
因为这个文本文件的行数不一定是4行,有可能是6行、7行。。。现在要通过查找“OK”这个单词来获取它所在的行数(现在的这个是在第6行),然后再通过这个行数获得“B KKK KKKK SS”这一行(因中间隔有一行,所以这一行行数是“OK”单词那一行6-2=4)的开头一个单词“B”
其实最终目的想获取“B KKK KKKK SS”这一行的开头一个单词“B”,但因为这一行的行数是变化的单词也是变化的,只有通过上述办法实现。请问如何用QBAIC来实现?
回复列表 (共19个回复)
11 楼
zys [专家分:0] 发布于 2005-07-22 15:22:00
关键是不知怎样才能“获取最后一行的字符串”
对于如何把DOS环境中的变量转为QB中的变量,似乎是用ENVIRON$函数,但不会用。
12 楼
moz [专家分:37620] 发布于 2005-07-22 15:39:00
对,环境变量是用ENVIRON$
你尝试把这个函数显示出来看看
也可以尝试更改这个函数看看
获取最后一行:
1. 最传统的办法是用line input直至文件末为止.
13 楼
def [专家分:3380] 发布于 2005-07-23 14:20:00
不能用ENVIRON"XXX=???"创建,但可以修改
题外话:
其实在Win2000/Xp的%ComSpec%的版本是5。00
所以shell"ver"显示MS-DOS 5.00
其他的DOS里面是DOS的版本号
不信moz试试
14 楼
zys [专家分:0] 发布于 2005-07-27 10:32:00
请问怎样把下面的代码弄成函数形式,即要查找多个这样的文本文件
open "file.txt" for input as #1
dim s$(3)
line input #1,s$(1)
line input #2,s$(2)
do until eof(1)
line input #3,s$(3)
if instr(s$(3),"OK GOOD") then
s$(1)=ltrim$(s$(1))
i=instr(s$(1)," ")
if i>1 then s$(0)=left$(s$(1),i-1)
exit do
else
s$(1)=s$(2)
s$(2)=s$(3)
endif
loop
close
if s$(0)<>"" then print "找到目标单词为:";s$(0)
15 楼
moz [专家分:37620] 发布于 2005-07-27 13:29:00
函数很简单的
首先,你需要的条件是什么? (这就是参数表)
然后,你需要的结果是什么? (这就是返回值)
在你的这个问题里,说的是多个文件,也就是说条件只是多个变化的文件名(当然,"OK GOOD"也可以作为可变的参数的)
结果是需要前两行的第一个单词,也就是需要求一个字符串
这就简单了:
在你上面的代码加几句
[color=FF00FF]function findchr$(filess$)[/color]
k$="OK GOOD"
[color=FF00FF]f%=freefile[/color]
open [color=FF00FF]filess$[/color] for input as #f%
dim s$(3)
line input [color=FF00FF]#f%[/color],s$(1)
line input [color=FF00FF]#f%[/color],s$(2)
do until eof(1)
line input [color=FF00FF]#f%[/color],s$(3)
if instr(s$(3),k$) then
s$(1)=ltrim$(s$(1))
i%=instr(s$(1)," ")
if i%>1 then s$(0)=left$(s$(1),i%-1)
exit do
else
s$(1)=s$(2)
s$(2)=s$(3)
endif
loop
close [color=FF00FF]#f%[/color]
[color=FF00FF]findchr$=s$(0)[/color]
[color=FF00FF]end function[/color]
16 楼
zys [专家分:0] 发布于 2005-07-27 14:16:00
moz大侠真的风格高尚啊,不仅授人于鱼,更授于渔!在此真诚说声谢谢!
我想给你评上30分,但系统却说一个人在同一帖中最高得分不能超过50分,所以看下一次向您请教时再给分吧。(尽管我知道您不是为得分而帮助人的,但我却非常乐意为您加分)
17 楼
moz [专家分:37620] 发布于 2005-07-27 16:01:00
拜托,别把我抬太高了.
如果我帮到你一丁点忙的话
你只要轻描淡写的随便说一声谢谢就可以了,我就已经很高兴了.
评论我风格高尚(狂汗猛汗)之类的就太过份了.
简直让我无地自容了.
18 楼
zys [专家分:0] 发布于 2005-07-29 21:44:00
moz,您好!我学你上一帖做函数,但下面您写的这个我弄了很久都没有写成功,恳请您再帮忙一次,把下面的写成函数形式,谢谢。
deflng a-z
f$="file.txt"
t$="OK GOOD"
l=16383
lt=len(t$)
fr=freefile
cr$=chr$(13)+chr$(10)
dim c(3)
open f$ for binary as #fr
do until eof(fr)
a$=right$(a$,lt)+input$(l-lt,#fr)
i=instr(a$,t$)
if i>0 then exit do
loop
if i>0 then
s=seek(fr)-(l-lt)-(l-lt-i-lt)
if s<1 then s=1
seek #fr,s
a$=input$(l,#fr)
i=instr(a$,t$)
do
c(x)=instr(c(y)+1,a$,cr$)
y=x
x=y+1
if x>3 then x=0
loop until c(y)=0 or c(y)>i
y=x
x=y+1
if x>3 then x=0
if c(y)>0 and c(x)>c(y) then
b$=ltrim$(mid$(a$,c(y)+2,c(x)-c(y)-2)
k=instr(b$," ")
if k>1 then b$=left(b$,k-1)
endif
endif
if b$<>"" then print "找到目标单词为:";b$
19 楼
moz [专家分:37620] 发布于 2005-07-30 00:42:00
deflng a-z
[color=FF00FF]function Findword$(f$,t$)[/color]
'f$="file.txt" [color=FF00FF]这是参数里面的文件名[/color]
't$="OK GOOD" [color=FF00FF]这是参数里面需要找的词[/color]
l=16383
lt=len(t$)
fr=freefile
cr$=chr$(13)+chr$(10)
dim c(3)
open f$ for binary as #fr
do until eof(fr)
a$=right$(a$,lt)+input$(l-lt,#fr)
i=instr(a$,t$)
if i>0 then exit do
loop
if i>0 then
s=seek(fr)-(l-lt)-(l-lt-i-lt)
if s<1 then s=1
seek #fr,s
a$=input$(l,#fr)
i=instr(a$,t$)
do
c(x)=instr(c(y)+1,a$,cr$)
y=x
x=y+1
if x>3 then x=0
loop until c(y)=0 or c(y)>i
y=x
x=y+1
if x>3 then x=0
if c(y)>0 and c(x)>c(y) then
b$=ltrim$(mid$(a$,c(y)+2,c(x)-c(y)-2)
k=instr(b$," ")
if k>1 then b$=left(b$,k-1)
endif
endif
[color=FF00FF]FindWord$=b$[/color]
[color=FF00FF]end function[/color]
我来回复