为什么只输出一行?

时间:2022-07-05 15:03:31
昨天我问过这个问题:
有一种字符串booth,它可能有以下几种形式:
1.1A01,1.2C05,1.5D35......
2.1A01,.......
10.1A01,10.4B23......
11.1A01....
20.1A01......

请问,我怎么取出小数点的前面一位或者两位啊?我的意思是:当"."前面是1时,我把小数点前面为1的字符都取出来放在一个TXT里,当小数点前面为2时,又把这样的字符取出来放在另外一个txt里,如此类推。

在这里朋友的帮助下,我得到了答案。我现在把数据窗口中的booth字段输出,.前面是1的输出到1.txt里,是2的输出到2.txt里,如此类推,小数点前面是20的就输出到20.txt里。我的代码如下:(部分)
 string ls_folder,ls_ret,ls_file,ls_path,bno,line
int li_filenum1,ii,row
row=dw_1.rowcount()

getfolder("选择要保存到的文件夹",ls_folder)

for ii=1 to row
bno=dw_1.getitemstring(ii,"booth")
ls_ret=left(trim(bno),pos(trim(bno),'.')-1)
ls_file=ls_ret+".txt"
ls_path=ls_folder+ls_file
li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,replace!)

if not isnull(bno) then
line=bno
filewrite(li_filenum1,line)
end if
next
fileclose(li_filenum1)

我希望程序运行后,会自动生成20个txt文件,之后数据窗口中的字段都输出到相应的txt中,比如所有.前面为1的booth字段都输出到1.txt中,所有.前面为12的booth字段都输出到12.txt中。
但实际上,程序运行之后,倒是会自动生成20个txt文件,不过每个文件里只有一行记录,也就是说,每个txt中输出了一条booth字段后就结束了。而事实上数据窗口中是有很多字段的,不会只有一条。

比较长,劳烦大家帮我找下原因,感激不尽!

14 个解决方案

#1


.....
li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,Append!)
.....

#2


我试来,但结果也是一样啊。

#3


它只输出一行,按理应该是那个循环语句没有循环到,但我看不出原因来。

#4


应该用Append!
如果不行的话,你在if not isnull(bno) then之前跟踪一下变量bno,看看是不是没以行都取到了。

#5


我也觉得应该是用append!,因为fileopen是在循环体内。我现在试下跟踪bno看看。

#6


奇怪啊,它又没一行都循环来啊,但就是输出的时候只输出一行。

#7


会不会是fileclose那句放错地方了?但我无法判断什么时候输完了,怎么判断那些符合要求的字段已经输出完了呢?

#8


哈,你的循环只是做到了生成20个文件啊,每个文件你只filewrite了一次,当然只有一行了,要两重循环才行啊

#9


string ls_folder,ls_ret,ls_file,ls_path,bno,line
int li_filenum1,ii,row
row=dw_1.rowcount()

getfolder("选择要保存到的文件夹",ls_folder)

for ii=1 to row
bno=dw_1.getitemstring(ii,"booth")
ls_ret=left(trim(bno),pos(trim(bno),'.')-1)
ls_file=ls_ret+".txt"
ls_path=ls_folder+ls_file
li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,append!)

if not isnull(bno) then
line=bno
filewrite(li_filenum1,line)
end if
fileclose(li_filenum1)
next

#10


我现在改用choose case .....end choose可以输出全部了,不过我也试一下你这这样。

#11


还想问下:什么函数可以生成文件夹的啊?

#12


zhanwei说的也可以实现。

#13


zhanwei(@_@,晕眩ING)的方法你参考一下吧

#14


有点疑惑:如果我是把数据窗口中的所有内容都输出到一个文本文件,以下这样又可以

...

li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,replace!)
for ii=1 to row
bno=dw_1.getitemstring(ii,"booth")
if not isnull(bno) then
line=bno
filewrite(li_filenum1,line)
end if
next
fileclose(li_filenum1)


这里fileclose放在next后面又可以实现全部输出啊。

#1


.....
li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,Append!)
.....

#2


我试来,但结果也是一样啊。

#3


它只输出一行,按理应该是那个循环语句没有循环到,但我看不出原因来。

#4


应该用Append!
如果不行的话,你在if not isnull(bno) then之前跟踪一下变量bno,看看是不是没以行都取到了。

#5


我也觉得应该是用append!,因为fileopen是在循环体内。我现在试下跟踪bno看看。

#6


奇怪啊,它又没一行都循环来啊,但就是输出的时候只输出一行。

#7


会不会是fileclose那句放错地方了?但我无法判断什么时候输完了,怎么判断那些符合要求的字段已经输出完了呢?

#8


哈,你的循环只是做到了生成20个文件啊,每个文件你只filewrite了一次,当然只有一行了,要两重循环才行啊

#9


string ls_folder,ls_ret,ls_file,ls_path,bno,line
int li_filenum1,ii,row
row=dw_1.rowcount()

getfolder("选择要保存到的文件夹",ls_folder)

for ii=1 to row
bno=dw_1.getitemstring(ii,"booth")
ls_ret=left(trim(bno),pos(trim(bno),'.')-1)
ls_file=ls_ret+".txt"
ls_path=ls_folder+ls_file
li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,append!)

if not isnull(bno) then
line=bno
filewrite(li_filenum1,line)
end if
fileclose(li_filenum1)
next

#10


我现在改用choose case .....end choose可以输出全部了,不过我也试一下你这这样。

#11


还想问下:什么函数可以生成文件夹的啊?

#12


zhanwei说的也可以实现。

#13


zhanwei(@_@,晕眩ING)的方法你参考一下吧

#14


有点疑惑:如果我是把数据窗口中的所有内容都输出到一个文本文件,以下这样又可以

...

li_filenum1=fileopen(ls_path,linemode!,write!,lockwrite!,replace!)
for ii=1 to row
bno=dw_1.getitemstring(ii,"booth")
if not isnull(bno) then
line=bno
filewrite(li_filenum1,line)
end if
next
fileclose(li_filenum1)


这里fileclose放在next后面又可以实现全部输出啊。