VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

自動縮行程序(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作