注册 登录
编程论坛 VFP论坛

请教:如何批量将子目录内的所有SCX和VCX全都自动转换成prg?

cssnet 发布于 2022-11-21 18:17, 1764 次点击
在“类浏览器”中,打开某个可视类库或表单,点击“查看代码”,会得到一个“Viewcode.prg”,这“Viewcode.prg”是哪个工具生成的?有办法批处理吗?

其实,主要目的并非为了运行或编译,而是为了更方便地、全局地查阅目录内的一切代码,以便Debug。
先将一切东东转换为prg,然后再——

copy  *.prg  allprg.txt

接下来,只需仔细地检查这一个allprg.txt就好了,而不必分别去打开一大堆的prg、scx、vcx文件,搞得人头晕发狂消化不良大小便失禁……啥的。
15 回复
#2
吹水佬2022-11-21 22:01
看看这个有无帮助
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-11-21 23:29编辑过]

#3
cssnet2022-11-22 09:20
太感谢吹版啦!!!

只有本站会员才能查看附件,请 登录


以下是引用吹水佬在2022-11-21 22:01:25的发言:

看看这个有无帮助

#4
吹水佬2022-11-22 09:47
精通VFP帮助文件就是VFP大神了,传说中的那位VFP大师就是整理了VFP的示例成书。
#5
cssnet2022-11-22 10:27
东转西转的,总算定位到函数:
FUNCTION brwExportClass(toBrowser,tlShow,tcExportToFile)
代码有些长,看得有些头大,好像当中有很多变量形如“tcXXXXXX”,似乎是全局变量,一下子可能外人还没法直接调用此函数。
实在不行自己写一个简陋版scx2txt吧,可能更容易一些。

#6
cssnet2022-11-23 15:21
算了,这问题若知其然,则很简单。我老人家自己随手写一个,将就着用吧。

****************************
* __VfpAllCode2Txt__.prg
* 功能:将当前目录下的所有源码,全部打包至AllCode.txt
* 包括:*.h *.mpr *.prg *.SCX *.VCX 和 *.DBC *
****************************

clear all
close all
set safe off
on error do DoNothing

lMyself = PROGRAM()
lPathName = JUSTPATH(sys(16))
PathName = ADDBS(lPathName)
lFileName = ""
lcAllText = "*-----------" + 0h0D0A
lCRLF = 0h0D0A + "*-----------" + 0h0D0A
SET DEFAULT TO (lPathName)
SET PATH TO (lPathName)

*--------H--------
EXTENNAME = '*.h'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
    lprg = FileToStr(lFileName)
    lcAllText = lcAllText + "* " + lFileName + lCRLF + lprg + lCRLF
ENDFOR NCOUNT

*--------Mpr--------
EXTENNAME = '*.mpr'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
    lprg = FileToStr(lFileName)
    lcAllText = lcAllText + "* " + lFileName + lCRLF + lprg + lCRLF
ENDFOR NCOUNT

*--------Prg--------
EXTENNAME = '*.prg'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    if upper(JUSTSTEM(NAMEARRAY(NCOUNT,1))) == upper(lMyself)
        loop
    endif
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
    lprg = FileToStr(lFileName)
    lcAllText = lcAllText + "* " + lFileName + lCRLF + lprg + lCRLF
ENDFOR NCOUNT

*---------Form--------
EXTENNAME = '*.SCX'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
*    COMPILE FORM (lFileName)
    use (lFileName)
    pack
    scan
        lobjname = objname
        lMethods = Methods
        if ! EMPTY(lMethods)
            lcAllText = lcAllText + "* " + lFileName + " : " + lobjname + lCRLF + lMethods + lCRLF
        endif
    endscan
ENDFOR NCOUNT

*--------Visual Class--------
EXTENNAME = '*.VCX'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
*    COMPILE CLASSLIB (lFileName)
    use (lFileName)
    pack
    scan
        lobjname = objname
        lMethods = Methods
        if ! EMPTY(lMethods)
            lcAllText = lcAllText + "* " + lFileName + " : " + lobjname + lCRLF + lMethods + lCRLF
        endif
    endscan
ENDFOR NCOUNT

*--------DBC--------
EXTENNAME = '*.DBC'
FILENUM = Adir(NAMEARRAY, EXTENNAME)
FOR NCOUNT = 1 TO FILENUM
    lFileName = (PATHNAME) + NAMEARRAY(NCOUNT,1)
*    COMPILE DATABASE (lFileName)
    use (lFileName)
    pack
    locate for objectName = 'StoredProceduresSource'
    lMethods = code
    if ! EMPTY(lMethods)
        lcAllText = lcAllText + "* " + lFileName + lCRLF + lMethods + lCRLF
    endif
ENDFOR NCOUNT

strToFile(lcAllText, 'AllCode.txt')
CLOSE ALL
CLEAR ALL
*QUIT

PROCEDURE DoNothing
return
#7
sam_jiang2022-11-23 18:09
你只是把里面的方法全提出来吧?并不是转化成prg文件。
#8
cssnet2022-11-23 18:14
以下是引用sam_jiang在2022-11-23 18:09:02的发言:

你只是把里面的方法全提出来吧?并不是转化成prg文件。


我的要求很卑微——仅仅是想一股脑儿打包成TXT,以方便自己Debug;而不是为了转化成prg来成功运行。
#9
sam_jiang2022-11-24 07:28
你这叫半途而废,或者说是始乱终弃
#10
cssnet2022-11-24 10:41
以下是引用sam_jiang在2022-11-24 07:28:32的发言:

你这叫半途而废,或者说是始乱终弃


这个……那个……兄台批评得极是。
主要是ScxVcx2Prg源码太长啦,东拐西拐的没耐心细读,只好退而求其次也。
这也就相当于,当年徐志摩苦追林徽因终不可得,遂一扭头,一咬牙,将朋友妻陆小曼轻轻拿下;无论如何,大丈夫须当有妻,万万不可学金岳霖当一辈子的光棍痴汉。
就是这个一理儿吧,我说。
#11
lsh042022-12-06 22:55
把表单转成源码,在申请 软件著作权时也也用得到
#12
hdx602022-12-14 07:37
其实,主要目的并非为了运行或编译,而是为了更方便地、全局地查阅目录内的一切代码,以便Debug。
看了半天,看不懂意图。你该不会是需要“代码引用”的功能吧。
#13
gs25367856782022-12-14 09:20
群里有位大神叫王德榜,曾经做过把表单转化成PRG的程序,可以参考下。
#14
sam_jiang2022-12-14 11:48
回复 13楼 gs2536785678
不完善
#15
pvm20002022-12-22 23:42
把表单全部转成源码,有风险吧
#16
lsh042023-07-28 20:08
先转换成控件,然后就可以查看/复制 代码了
1