Initial commit - tasks v1.1.14
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
101
programe/xrecurse.prg
Normal file
101
programe/xrecurse.prg
Normal file
@@ -0,0 +1,101 @@
|
||||
* Test Source Code
|
||||
x=CREATE('FilesList')
|
||||
*!* SET TEXTMERGE ON TO TestRecurse NOSHOW
|
||||
x.FileExtensions = 'sql'
|
||||
x.Recurse("D:\ROA_RB\DATABASE\SCRIPTURI\")
|
||||
|
||||
*!* SET TEXTMERGE TO
|
||||
*!* MODI COMM TestRecurse.txt
|
||||
|
||||
|
||||
DEFINE CLASS FilesList AS Recurse
|
||||
|
||||
*
|
||||
PROCEDURE INIT
|
||||
DODEFAULT()
|
||||
|
||||
CREATE CURSOR dirlist (DirName C(100), FileName C(250) , FileExt C(3), ;
|
||||
rty C(1), FileAttr C(5), FileSize N(12,1), DateMod D, TimeMod C(12))
|
||||
ENDPROC && Init
|
||||
*
|
||||
*!* PROCEDURE ProcessDir(tcDir, tcParentDir)
|
||||
*!* DODEFAULT()
|
||||
*!* ENDPROC
|
||||
PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr)
|
||||
|
||||
LOCAL loRec
|
||||
IF !USED('dirlist')
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT dirlist
|
||||
SCATTER NAME loRec BLANK
|
||||
WITH loRec
|
||||
.rty='F'
|
||||
.DirName = JUSTPATH(tcFile)
|
||||
.FileAttr = tcAttr
|
||||
.FileName = JUSTFNAME(tcFile)
|
||||
.FileExt = JUSTEXT(tcFile)
|
||||
.FileSize = IIF(tnSize > 0, ROUND(tnSize/1024,1) ,0 )
|
||||
.DateMod = tdLastMod
|
||||
.TimeMod = tcTime
|
||||
ENDWITH
|
||||
|
||||
if len(allt(this.FileExtensions)) > 0
|
||||
if atc(loRec.FileExt , this.FileExtensions ) = 0
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
INSERT INTO dirlist FROM NAME loRec
|
||||
ENDPROC && ProcessFile
|
||||
|
||||
ENDDEFINE && FilesList
|
||||
|
||||
DEFINE CLASS Recurse AS CUSTOM
|
||||
|
||||
FileExtensions = "" && what file extensions it process
|
||||
|
||||
PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr)
|
||||
* Abstract Method to be overridden in subclasses that actually do something
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ProcessDir(tcDir, tcParentDir)
|
||||
* Override this method as desired.
|
||||
ENDPROC
|
||||
|
||||
FUNCTION Recurse
|
||||
LPARAMETERS pcDir
|
||||
LOCAL lnPtr, lnFileCount, laFileList, lcDir, lcFile, lcCurDir
|
||||
lcCurDir = FULLPATH(CURDIR())
|
||||
CHDIR (pcDir)
|
||||
*? 'Dir -> ' + FULLPATH(CURDIR())
|
||||
|
||||
DIMENSION laFileList[1]
|
||||
|
||||
*--- Read the chosen directory.
|
||||
lnFileCount = ADIR(laFileList, '*.*', 'D')
|
||||
FOR lnPtr = 1 TO lnFileCount
|
||||
|
||||
IF 'D' $ laFileList[lnPtr, 5]
|
||||
*--- Get directory name.
|
||||
lcDir = laFileList[lnPtr, 1]
|
||||
|
||||
*--- Ignore current and parent directory pointers.
|
||||
IF lcDir != '.' AND lcDir != '..'
|
||||
*--- Call this routine again.
|
||||
THIS.ProcessDir(lcDir, pcDir)
|
||||
THIS.Recurse(ADDBS(pcDir)+lcDir)
|
||||
ENDIF
|
||||
|
||||
ELSE
|
||||
*--- Get the Long file name and process it:
|
||||
THIS.ProcessFile( ADDBS(pcDir)+laFileList[lnPtr, 1], laFileList[lnPtr, 2], laFileList[lnPtr, 3], laFileList[lnPtr, 4], laFileList[lnPtr, 5] )
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
*--- Move back to parent directory.
|
||||
CHDIR (lcCurDir)
|
||||
RETURN
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
Reference in New Issue
Block a user