|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 1 樓
|
發表於: 星期日 九月 14, 2003 7:01 pm 文章主題: 自動縮行程序(轉貼) |
|
|
源程序编程自动缩行小工具(源码)
*整理PRG程序,使其自动按缩格排列
*程序名:REPRG.PRG
*程序员:庄稼
*1995.7.12
*变量说明
*CXM:需整理的程序名
*SJK:数据库名
*ML:本程序运行时所在的目录名及文件名(用于取其目录以打开数据库)
*T1:开始时间
*T2:结束时间
代碼: | SET TALK OFF
SET SAFETY OFF
SET ODOMETER TO 1
CLEAR
CXM=GETFILE('PRG','Please select the file')
IF .NOT. CXM==''
IF FILE(CXM)
@1,5 SAY 'The file is: '+CXM
T1=SECOND()
@3,5 SAY 'Reading the program...'
SJK=LEFT(SYS(16),AT('.',SYS(16))-1)
* IF FILE(SJK+'.DBF')
* USE &SJK
* ZAP
CREATE CURSOR REPRG (YJ C(200))
SET TALK ON
APPEND FROM &CXM TYPE SDF
SET TALK OFF
@7,5 SAY 'Editing the program...'
SET TALK ON
REPLACE ALL YJ WITH LTRIM(YJ)
SET TALK OFF
SG=''
LX=.F.
GO TOP
@9,5 SAY 'Completed:'
DO WHILE .NOT. EOF()
@ 9,18 SAY RECNO()/RECCOUNT()*100 PICTURE '999.99%'
DO CASE
CASE UPPER(LEFT(YJ,8))='DO WHILE' .OR.;
UPPER(LEFT(YJ,2))='IF'
REPLACE YJ WITH SG+YJ
SKIP
SG=SG+SPACE(3)
LOOP
CASE UPPER(LEFT(YJ,5))='ENDDO' .OR.;
UPPER(LEFT(YJ,5))='ENDIF'
SG=SPACE(LEN(SG)-3)
CASE RIGHT(TRIM(YJ),1)=';' .AND. LX=.F.
LX=.T.
REPLACE YJ WITH SG+YJ
SKIP
LOOP
CASE RIGHT(TRIM(YJ),1)#';' .AND. LX=.T.
LX=.F.
REPLACE YJ WITH ' '+SG+YJ
SKIP
LOOP
CASE UPPER(LEFT(YJ,3))='FOR'
IF LX
REPLACE YJ WITH ' '+SG+YJ
ELSE
REPLACE YJ WITH SG+YJ
SG=SG+SPACE(4)
ENDIF
SKIP
LOOP
CASE UPPER(LEFT(YJ,6))='ENDFOR' .OR. UPPER(LEFT(YJ,6))='NEXT'
SG=SPACE(LEN(SG)-4)
CASE UPPER(LEFT(YJ,4))='SCAN'
REPLACE YJ WITH SG+YJ
SKIP
SG=SG+SPACE(5)
LOOP
CASE UPPER(LEFT(YJ,7))='ENDSCAN'
SG=SPACE(LEN(SG)-5)
CASE UPPER(LEFT(YJ,8))='PRINTJOB'
REPLACE YJ WITH SG+YJ
SKIP
SG=SG+SPACE(5)
LOOP
CASE UPPER(LEFT(YJ,11))='ENDPRINTJOB'
SG=SPACE(LEN(SG)-5)
CASE UPPER(LEFT(YJ,7))='DO CASE'
REPLACE YJ WITH SG+YJ
SKIP
SG=SG+SPACE(8)
LOOP
CASE UPPER(LEFT(YJ,7))='ENDCASE'
SG=SPACE(LEN(SG)-8)
CASE UPPER(LEFT(YJ,4))='CASE' .OR. UPPER(LEFT(YJ,9))='OTHERWISE'
REPLACE YJ WITH SPACE(LEN(SG)-5)+YJ
SKIP
LOOP
CASE UPPER(LEFT(YJ,4))='ELSE'
REPLACE YJ WITH SPACE(LEN(SG)-1)+YJ
SKIP
LOOP
ENDCASE
IF LX
REPLACE YJ WITH ' '+SG+YJ
ELSE
REPLACE YJ WITH SG+YJ
ENDIF
SKIP
ENDDO
BAKENAME=LEFT(CXM,AT('.',CXM))+'BAK'
IF FILE(BAKENAME)
ERASE &BAKENAME
ENDIF
RENAME &CXM TO &BAKENAME
GO TOP
SET CONSOL OFF
SET PRINT TO &CXM
*SET PRINT ON
@11,5 SAY 'Creating the program...'
@12,5 SAY 'Completed: '
DO WHILE .NOT. EOF()
???TRIM(YJ)+CHR(13)+CHR(10)
@ 12,18 SAY RECNO()/RECCOUNT()*100 PICTURE '999.99%'
SKIP
ENDDO
*SET PRINT OFF
SET PRINT TO
SET CONSOL ON
USE
T2=SECOND()
IF T1>=T2
T2=T2+86400
ENDIF
??CHR(7)
@15,5 SAY 'Used time: '+LTRIM(STR(T2-T1,8,3))+'s'
@17,5 SAY '<< Ok! >>'
* ELSE
* ? 'The file '+SJK+'.DBF lost!'
* ENDIF
ELSE
?CHR(7)
?'The file does not exist!'
ENDIF
ENDIF
CANCEL |
_________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|