(已解决)while循环进入死循环,请大家帮我看看问题出在哪里~~谢谢
本帖最后由 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 为什么啊,这是为什么啊。。。 整理好了再发,看不明白 不明白你的程序意图,至少你得告诉我们,你的程序要在什么样的情况下面退出哦,目前只有看到你的程序有这样一个出口!不死才怪....
If ($FileName= "NotFound" And $FilePath= "NotFound" and($B=0 And $i=1 ) then exitloop 本帖最后由 _ddqs. 于 2010-12-13 18:29 编辑
把下面2行代码加到循环中的适合位置~~~ If $FIleName = "" Then $FIleName = "NotFound"
If $FilePath = "" Then $FilePath = "NotFound"
While (1)
If $FIleName = "" Then $FIleName = "NotFound"
If $FilePath = "" Then $FilePath = "NotFound"
-----------------------------------------------------------------------------------_FileWriteLog(@ScriptDir & "\交DBF.log", $FIleName & "库初始化失败。")
ExitLoop ;这里可能是非法文件名,读取失败 也退出!
EndIf 本帖最后由 _ddqs. 于 2010-12-13 19:25 编辑
逻辑有点乱,处理有点类似下面的代码,自己再修改下
;写记录不要在循环内检测:
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
EndIf
While (1)
If Not FileExists( $FilePath & $FIleName) Then ExitLoop ;不存在文件
$C = readdbf($oexcel, $FilePath, $FIleName, $ColumnNum)
If $C = 0 Then
_FileWriteLog(@ScriptDir & "\DBF.log", $FIleName & "库清空成功。")
$B += 1
Else
_FileWriteLog(@ScriptDir & "\交DBF.log", $FIleName & "库初始化失败。")
EndIf
If ($B = 0 And $i = 1) Then
_FileWriteLog(@ScriptDir & "\DBF.log", "配置文件无任何配置,无法验证DBF库否清空")
;ExitLoop
EndIf
;如果配置文件为空,即$B=0,则记录日志后退出循环,结束程序
If $B=0 ThenExitLoop ;
If $i>99 ThenExitLoop ; 当$B非0时的出口,限定循环最高次
$i += 1
If (任务=异常) then Sleep(1000);调试用
WEnd
顶,顺便学习。 哦。。这样。。。。。学习了,看来要继续修炼才行。 雷锋精神传天下!谢谢分享!
页:
[1]