*********************************
* INDENT.PRG - 格式化 .PRG 文件为缩进格式 Ver 1.0
* (C) M.L.Y 2003.2.3
*
* 在 WIN98 + VFP 6.0 环境测试通过
*********************************
SET TALK OFF
SET SAFETY ON
LOCAL lcInFile, lcOutFile
LOCAL lcCRLF, lcOutStr, lnLevel1, lnLevel2, lnFileHandle, lcLine
IF MESSAGEBOX([INDENT.PRG - 格式化 .PRG 文件为缩进格式 Ver 1.0] + CHR(13) + ;
CHR(13) + ;
[是否继续?], 4 + 32 + 256, [.PRG Indent]) <> 6
RETURN
ENDIF
lcInFile = GETFILE([PRG], [PRG file:], [Open])
IF EMPTY(lcInFile)
RETURN
ENDIF
IF RAT("/", lcInFile) > 0
lcOutFile = SUBSTR(lcInFile, RAT("/", lcInFile ) + 1)
ENDIF
lcOutFile = SUBSTR(lcOutFile, 1, RAT(".", lcOutFile)) + "PR3"
lcOutFile = PUTFILE("Output:", lcOutFile, "PR3")
IF EMPTY(lcOutFile)
RETURN
ENDIF
lcCRLF = CHR(13) + CHR(10)
* 输出字符串:
lcOutStr = []
* 当前缩进级数:
lnLevel1 = 0
* 下一行缩进级数:
lnLevel2 = 0
lnFileHandle = FOPEN(lcInFile)
IF lnFileHandle <= 0
= MESSAGEBOX([打开文件出错!])
RETURN 0
ENDIF
DO WHILE .T.
IF FEOF(lnFileHandle)
EXIT
ENDIF
* 读1行
lcLine = FGETS(lnFileHandle, 10000)
* TAB 统一换为 4 个空格
lcLine = ALLTRIM(STRTRAN(lcLine, CHR(9), SPACE(4)))
* 判断缩进级数
lnLevel1 = IndentLevel(lcLine, lnLevel1, @lnLevel2)
* 每级为 4 个空格:
IF !EMPTY(lcLine)
lcOutStr = lcOutStr + SPACE(4*lnLevel1) + lcLine + lcCRLF
ELSE
lcOutStr = lcOutStr + lcCRLF
ENDIF
* 下一行缩进级数:
lnLevel1 = lnLevel2
ENDDO
= FCLOSE(lnFileHandle)
* 输出字符串写到输出文件:
= StrToFile(lcOutStr, lcOutFile)
RETURN
*********************************
* FUNCTION IndentLevel(tcLine, tnLevel1, @tnLevel2)
* 计算缩进级数
*
* tcLine - .PRG 当前行
* tnLevel1 - 本行缩进级数
* tnLevel2 - 下一行缩进级数
* 函数返回tnLevel1, tnLevel2 通过引用返回
*********************************