一键屏蔽/恢复错误处理代码
因调试程序的需要,有时希望一键屏蔽程序中的错误处理代码,以便让Bug无所遁形;调试完,再一键恢复错误处理代码。于是写了这两个函数。
因仅仅是自用吧,平时其实也没在VFP当中用到“TRY...CATCH...FINALLY”,故未作细致处理;真想要处理也行,只不过“TRY”这个单词太短,可能要用==来比较,另外,还须小心地判断大小写以及“TRY &&注释”等复杂情况。
其实"PROCEDURE Error...ENDPROC"也有大小写问题,只不过正常情况下,这两行都不必自己写,是由IDE自动生成的,故也省略了大小写判断。
*--------------------------*
function ErrorDisabled
LPARAMETERS lcSrc
* 一键屏蔽错误处理代码
local lcRkey, lcDst, laLen, lnErr, i, lc1line
lcRkey = 0h0D0A
lcDst = ""
laLen = ALINES(lAprg, lcSrc, 0)
lnErr = 0
for i = 1 to laLen
lc1line = lAprg[i]
do case
case alltrim(lc1line) = "PROCEDURE Error"
lnErr = 1
lcDst = lcDst + "#if 1=2"+ lcRkey
case alltrim(lc1line) == "ENDPROC" .and. lnErr = 1
lnErr = 0
lcDst = lcDst + "#endif 1=2"+ lcRkey
#if .f.
case alltrim(lc1line) == "TRY"
lnErr = 3
lcDst = lcDst + "#if 3=4"+ lcRkey
case alltrim(lc1line) == "ENDTRY" .and. lnErr = 3
lnErr = 0
lcDst = lcDst + "#endif 3=4"+ lcRkey
#endif .f.
OTHERWISE
lcDst = lcDst + lc1line+ lcRkey
endcase
endfor i
lcDst = strtran(lcDst, "on error", "*~`~* on error", -1, -1, 1)
return lcDst
*--------------------------*
function ErrorEnabled
LPARAMETERS lcSrc
* 一键恢复错误处理代码
local lcDst
lcDst = strtran(lcSrc, "*~`~* on error", "on error", -1, -1, 1)
lcDst = strtran(lcDst, "#if 1=2", "PROCEDURE Error", -1, -1, 1)
lcDst = strtran(lcDst, "#endif 1=2", "ENDPROC", -1, -1, 1)
lcDst = strtran(lcDst, "#if 3=4", "TRY", -1, -1, 1)
lcDst = strtran(lcDst, "#endif 3=4", "ENDTRY", -1, -1, 1)
return lcDst