本帖最后由 boy007zz 于 2010-12-16 15:10 编辑
我写了一个while循环调用EXCEL读取DBF库COUNT值的函数,可却进入了死循环,且只能读取i=1的值~大家帮我看看吧~~谢谢
我的程序:#include <Excel.au3>
#include <Array.au3>
#include<file.au3>
Dim $i=1
Dim $B=0
Dim $C
Dim $FLAG = True
Global Const $xlUp = -4162
$FilePath=IniRead(@ScriptDir&"\dbfconfig.ini","DBF","FilePath" & $i,"NotFound")
$FIleName=IniRead(@ScriptDir&"\dbfconfig.ini","DBF","FileName" & $i,"NotFound")
local $oexcel = _ExcelBookOpen($FilePath,0) ;参数0为静默打开DBF文件
$ColumnNum= $oExcel.Sheets($FileName).Range("A65536").End($xlUp).Row -1; A列第65536行之上的最后有数据的单元格所在行数
$REG=IniRead(@ScriptDir & "\dbfconfig.ini","InitDBFData","REGKEY" & $i,"NOTFOUND")
$KEYNAME=IniRead(@ScriptDir & "\dbfconfig.ini","InitDBFData","KEYNAME" & $i,"NOTFOUND")
Func readdbf (ByRef $oexcel,ByRef $FilePath,ByRef $FileName,ByRef $ColumnNum);自定义函数--读取dbf库count值
EndFunc
While(1)
;判断是否没有任何配置项
;如果配置文件为空,即$B=0,则记录日志后退出循环,结束程序
;如果配置文件不为空,即$B<>0表示已经执行完毕所有配置正常,则记录日志后退出循环,结束程序
;如果缺少一个或者多个配置项,则记录执行失败日志,$B不增加,但$i加1,表示允许程序继续执行
If ($FileName= "NotFound" And $FilePath= "NotFound" ) Then
If( $B=0 And $i=1 )Then
_FileWriteLog(@ScriptDir & "\DBF.log","配置文件无任何配置,无法验证DBF库否清空")
EndIf
ExitLoop
EndIf
;如果缺少一个或者多个配置项,则记录执行失败日志,$B不增加,但$i加1,表示允许程序继续执行
If ($FileName= "NotFound" Or $FilePath= "NotFound" ) Then
_FileWriteLog(@ScriptDir & "\DBF.log","缺少部分配置项,"&$FilePath&$i&"库清空失败。")
$i += 1
ContinueLoop
EndIf
;如果一个或者多个配置项的值为空,则记录执行失败日志,$B不增加,但$i加1,表示允许程序继续执行
If ($FileName= ""Or $FilePath= "") Then
_FileWriteLog(@ScriptDir & "\DBF.log","配置项的值不能为空,Disk"&$FilePath&$i&"库清空失败。")
$i += 1
ContinueLoop
Else
$C=readdbf($oexcel,$FilePath,$FileName,$ColumnNum)
If $C=0 Then
_FileWriteLog(@ScriptDir & "\DBF.log",$FileName&"库清空成功。")
$B += 1
Else
_FileWriteLog(@ScriptDir & "\交DBF.log",$FileName&"库初始化失败。")
EndIf
$i += 1
EndIf
WEnd
;由于最后一重循环将$i增加1,但是没有读取DBF库,故将该值减一,表示实际读取了i个DBF库
$i-=1
;程序执行完毕,写注册表,并记录日志
;$B等于$i表示程序创建盘符个数与配置文件配置的个数一致,即程序执行成功
If( $B=$i ) Then
RegWrite($REG,$KEYNAME,"REG_SZ","0") ; 若成功,创建键值为0
_FileWriteLog(@ScriptDir & "\DBF.log","==========程序成功执行完毕==========")
Else
RegWrite($REG,$KEYNAME,"REG_SZ","1") ; 若sb,创建键值为1
_FileWriteLog(@ScriptDir & "\DBF.log","==========程序执行完毕,但出现错误,请检查==========")
EndIf
我程序要实现的功能是,根据配置文件DBF库的路径读取DBF库,并取得dbf库的count值,需要的判断:
1、查看配置文件里的配置,如果配置文件为空,B=0,退出循环,写日志
2、查看配置文件里的配置,若配置文件不为空,但缺少项目或某项值为空,则B=0,i+1,继续读取i=2的情况
3、如果一个或者多个配置项的值为空,则记录执行失败日志,B不增加,但$i加1,表示允许程序继续执行
进入下一级判断,如果配置项正常,则用自定义函数$C=readdbf($oexcel,$FilePath,$FileName,$ColumnNum)计算DBF的count值,若$C=0,即DBF库为空,则B+1(表示执行成功),退出循环;i+1进入下一个循环
4、如果配置项正常,但$C不等于0,退出循环,i=1进入下一个循环
程序运行完毕后,写注册表键值
$B等于$i表示程序创建盘符个数与配置文件配置的个数一致,即程序执行成功,注册表置0,否则值1 |