如何在Visual FoxPro中手动生成整个项目的文本文件(例如.sca,.vca等)

时间:2011-05-25 13:20:36

标签: diff foxpro visual-foxpro

挑战在于我正在检查我的FoxPro代码到源代码控制中(使用Mercurial,但这不是这个问题的焦点),并希望快速获取FoxPro SCCTEXT输出和二进制输出而不使用{ {1}}功能。

对于我想要生成的输出类型的示例,VFPX source包含许多这些文本.sca,.vca等文件。 有没有办法按需生成这些文件?

2 个答案:

答案 0 :(得分:6)

您可以破解scctext.prg(随VFP提供)并使用项目挂钩生成文件,而不是设置源控件提供程序 - 有关使用Subversion的示例实现,请参阅http://paulmcnett.com/scX.php

编辑:你看过Alternate SCCText on Codeplex

吗?

另请参阅http://www.foxpert.com/docs/cvs.en.htm了解其他观点。

答案 1 :(得分:4)

这是我用来为我的Project文件中的每个文件生成SCCText文件的代码。只需打开您的项目(以确保它是活动项目,然后运行此prg文件)。

(2011-06-10更新:添加了一项新功能,如果原始源文件的DateTime比现有的SCC文件更新,则只会构建新的SCC文本文件。实际上,这个新版本只生成一个新的SCC文件如果VFP源文件自上次运行以来已被更改。)

lnResponse = MessageBox('Run SSCText to generate ascii code files?', 3, 'Generate SCC files?')

If lnResponse <> 6
    Return
EndIf

*Clear All
*Release All
Set ClassLib to && Must clear them out, cause we're about to generate ascii files of them

lnCount = DoSCCTextOnProject()

? Chr(10)+Chr(13)
? 'Done. ' + Str(lnCount) + ' files processed.'

*----------------------------------------------------------------------
Procedure DoSCCTextOnProject

Local loFile, loProject, lnCount

lcSCCText = Home(1) + 'SCCText.prg'
lnCount = 0
If !File(lcSCCText)
    Messagebox('Unable to find file ' + lcSCCText, 16, 'Error')
    Return 0
Endif

Try
    loProject = _vfp.ActiveProject
Catch To loEx
Endtry

If Type('loEx') = 'O'
    Messagebox('There are no active projects', 64, 'Error')
    Return 0
Endif

lcSkipFiles = 'LIST-FILES-TO-SKIP-HERE'

For Each loFile In loProject.Files

    If Inlist(loFile.Type, 'V', 'K', 'R') and ;
         !InList(Upper(JustFname(loFile.name)), Upper(lcSkipFiles)) ;
         and Fdate(loFile.name, 1) > SCCFileDateTime(loFile.name)
                ? 'Generating: ' + loFile.Name
                Do (lcSCCText) With loFile.Name
                lnCount = lnCount + 1 
    Endif
Endfor 

Return lnCount

*------------------------------------------------------------------
Procedure SCCFileDateTime(tcFile)

    lcSCCFilename = Upper(Strtran(Upper(tcFile), '.SCX', '.SCA'))
    lcSCCFilename = Strtran(lcSCCFilename, '.VCX', '.VCA')
    lcSCCFilename = Strtran(lcSCCFilename, '.FRX', '.FRA')

    If File(lcSCCFilename)
        Return Fdate(lcSCCFilename, 1)
    Else
        Return {^1900-01-01 00:00:00}
    EndIf
EndProc