begin process at 2010 02 09 01:53:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > FILESPROC() && APPLIQUE UNE PROCÉDURE À TOUS LES FICHIERS D'UN DOSSIER [ET DE SES SOUS-DOSSIERS]

FILESPROC() && APPLIQUE UNE PROCÉDURE À TOUS LES FICHIERS D'UN DOSSIER [ET DE SES SOUS-DOSSIERS]


 Information sur la source

 Description

FilesProc() illustre plusieurs particularités de VFP :
- les messages de déboguage ASSERT acitfs seulement si SET ASSERTS ON
- la récursion (ici dans les sous-dossiers d'un dossier)
- grâce au typage souple des variables, la possibilité de passer n'importe quel type à une procédure
- la fonction aDir() permettant de trouver le contenu d'un dossier avec un masque de fichiers
- le passage de paramètre par référence avec la balise @
- la tabulation du contenu d'une liste délimitée au moyen de la fonction aLines()
- le comptage du nombre de paramètres effectivement passés au moyen de la fonction Pcount()
- la programmation dynamique au moyen de la fonction Evaluate()

Le code comporte une procédure de test FilesProc_Test qui affiche simplement les fichiers .xls contenus dans un dossier [et ses sou-dossiers]

/!\ cette fonction nécessite des fonctions postées par ailleurs :
- asubFolders()
- aAppend()

Source

  • PROCEDURE FilesProc && Applique une procédure à tous les fichiers d'un dossier [et de ses sous-dossiers] ; jusqu'à 5 paramètres peuvent être passés à la procédure
  • LPARAMETERS ;
  • tcDir,; && Adresse du dossier où les fichiers sont à chercher
  • tcProcName,; && Nom de la procédure à appliquer à chaque fichier trouvé
  • tcFileMasks,; && [*.*] Masques de fichiers à traiter (séparés par virgule)
  • tlSubDirs,; && [.F.] Chercher dans les sous-dossiers
  • tcSubDirsExcl,; && [space(0)] Sous-dossiers à exclure de la recherche (séparés par virgule)
  • tuProcParm1,; && [] 1er paramètre à passer à la procédure
  • tuProcParm2,; && [] 2ème paramètre à passer à la procédure
  • tuProcParm3,; && [] 3ème paramètre à passer à la procédure
  • tuProcParm4,; && [] 4eme paramètre à passer à la procédure
  • tuProcParm5 && [] 5ème paramètre à passer à la procédure
  • * on pourrait passer jusqu'à 19 paramètres à la procédure ...
  • LOCAL lnResult && Nombre de fichiers traités
  • m.lnResult = 0
  • * Si les paramètres requis sont valides
  • LOCAL llParms
  • m.llParms = Vartype(m.tcDir)=='C' ;
  • AND Directory(m.tcDir) ;
  • AND Vartype(m.tcProcName) == 'C' ;
  • AND NOT Empty(m.tcProcName) && comment vérifier que la procédure est visible ?
  • ASSERT m.llParms MESSAGE Program() + " - Invalid Required parameters"
  • IF m.llParms
  • LOCAL lcDir
  • m.lcDir = Addbs(m.tcDir)
  • * Assigner leurs valeurs par défaut aux paramètres optionnels
  • LOCAL lcFileMasks, llSubDirs, lcSubDirsExcl
  • m.lcFileMasks = Iif(Vartype(m.tcFileMasks) == 'C', Alltrim(m.tcFileMasks), [*.*])
  • m.llSubDirs = Iif(Vartype(m.tlSubDirs) == 'L', m.tlSubDirs, .F.)
  • m.lcSubDirsExcl = Iif(m.llSubDirs AND Vartype(m.tcSubDirsExcl)=='C', Upper(m.tcSubDirsExcl), Space(0))
  • * Tabuler les fichiers situés dans le répertoire indiqué et répondant au(x) masque(s)
  • LOCAL lnMasks, lcMask, lnDocs
  • LOCAL ARRAY laMasks[1], laDocs[1], laDocs1[1]
  • m.lnMasks = ALines(m.laMasks, m.lcFileMasks, .T., VIRGULE)
  • FOR EACH m.lcMask IN m.laMasks
  • DIMENSION laDocs1[1]
  • laDocs1[1] = .F.
  • aDir(m.laDocs1, m.lcDir + m.lcMask) && pas de dossier
  • m.lnDocs = aAppend(@m.laDocs, @m.laDocs1)
  • ENDFOR
  • Asort(m.laDocs, 1)
  • * Si recherche dans les sous-dossiers demandée,
  • IF m.llSubDirs
  • * Si sous-dossier(s) dans le dossier
  • LOCAL lnSubDirs
  • LOCAL ARRAY laSubDirs[1]
  • m.lnSubDirs = aSubFolders(@m.laSubDirs, m.lcDir)
  • IF m.lnSubDirs > 0
  • * Ajouter les sous-dossiers au tableau de documents
  • m.lnDocs = aAppend(@laDocs, @laSubDirs)
  • * Tabuler les sous-dossiers à exclure éventuels
  • LOCAL lnDirsExcl
  • LOCAL ARRAY laDirsExcl[1]
  • m.lnDirsExcl = aLines(m.laDirsExcl, m.lcSubDirsExcl, .T., VIRGULE)
  • ENDIF
  • ENDIF
  • * Si le dossier comporte des documents
  • IF m.lnDocs > 0
  • * Préparer la chaine de paramètres à passer à la procédure
  • LOCAL lnProcParms, lcProcParms, lnProcParm
  • m.lnProcParms = Pcount() - 5 && les paramètres commencent en 6è position
  • m.lcProcParms = Space(0)
  • IF m.lnProcParms > 0
  • FOR m.lnProcParm = 1 TO m.lnProcParms
  • m.lcProcParms = m.lcProcParms + VIRGULE + 'm.tuProcParm' + Transform(m.lnProcParm)
  • ENDFOR
  • ENDIF
  • * Pour chaque "document" (fichier ou sous-dossier)
  • LOCAL lnDoc, lcDoc, lcDocAdr, llDoc
  • FOR m.lnDoc = 1 to m.lnDocs
  • m.lcDoc = laDocs[m.lnDoc, 1]
  • m.lcDocAdr = m.lcDir + m.lcDoc
  • * Si dossier exploitable, récurser le cas échéant
  • IF 'D' $ Upper(laDocs[m.lnDoc, 5])
  • IF m.llSubDirs ;
  • AND ! InList(m.lcDoc, '.', '..') ;
  • AND (m.lnDirsExcl = 0 OR Ascan(laDirsExcl, Upper(m.lcDoc)) = 0)
  • m.lnResult = m.lnResult + ; && pour récursion
  • Evaluate('FilesProc (m.lcDocAdr, m.tcProcName, m.lcFileMasks, m.llSubDirs, m.lcSubDirsExcl' + ;
  • m.lcProcParms + ")")
  • ENDIF
  • * Sinon (fichier), appliquer la procédure indiquée
  • ELSE
  • m.llDoc = Evaluate(m.tcProcName + [("] + m.lcDocAdr + ["] + m.lcProcParms + ")")
  • m.lnResult = m.lnResult + Iif(m.llDoc, 1, 0)
  • ENDIF
  • ENDFOR
  • ENDIF
  • ENDIF
  • RETURN m.lnResult
  • * -------------------------------
  • PROCEDURE FilesProc_Test && Teste FilesProc
  • ? Sys(16)
  • LOCAL lnFiles
  • m.lnFiles = FilesProc(GetDir(Curdir(),'',"Où sont les fichiers Excel à traiter ?", 16), ;
  • 'FilesProc_Test_Proc', '*.xls',.T., '', Date())
  • ? Transform(m.lnFiles) + " Fichiers traités"
	PROCEDURE FilesProc && Applique une procédure à tous les fichiers d'un dossier [et de ses sous-dossiers] ; jusqu'à 5 paramètres peuvent être passés à la procédure
	LPARAMETERS ;
		tcDir,; &&	Adresse du dossier où les fichiers sont à chercher
		tcProcName,; && Nom de la procédure à appliquer à chaque fichier trouvé
		tcFileMasks,; && [*.*] Masques de fichiers à traiter (séparés par virgule)
		tlSubDirs,; &&	[.F.] Chercher dans les sous-dossiers
		tcSubDirsExcl,;	&& [space(0)] Sous-dossiers à exclure de la recherche (séparés par virgule)
		tuProcParm1,; && [] 1er paramètre à passer à la procédure
		tuProcParm2,; && [] 2ème paramètre à passer à la procédure
		tuProcParm3,; && [] 3ème paramètre à passer à la procédure
		tuProcParm4,; && [] 4eme paramètre à passer à la procédure
		tuProcParm5 && [] 5ème paramètre à passer à la procédure
		* on pourrait passer jusqu'à 19 paramètres à la procédure ...
	LOCAL lnResult	&& Nombre de fichiers traités
	m.lnResult = 0

	* Si les paramètres requis sont valides
	LOCAL llParms
	m.llParms = Vartype(m.tcDir)=='C' ;
				 AND Directory(m.tcDir) ;
				 AND Vartype(m.tcProcName) == 'C' ;
				 AND NOT Empty(m.tcProcName) && comment vérifier que la procédure est visible ?
	ASSERT m.llParms MESSAGE Program() + " - Invalid Required parameters"
	IF m.llParms
		LOCAL lcDir
	 	m.lcDir = Addbs(m.tcDir)

		* Assigner leurs valeurs par défaut aux paramètres optionnels
		LOCAL lcFileMasks, llSubDirs, lcSubDirsExcl
		m.lcFileMasks = Iif(Vartype(m.tcFileMasks) == 'C', Alltrim(m.tcFileMasks), [*.*])
		m.llSubDirs = Iif(Vartype(m.tlSubDirs) == 'L', m.tlSubDirs, .F.)
		m.lcSubDirsExcl = Iif(m.llSubDirs AND Vartype(m.tcSubDirsExcl)=='C', Upper(m.tcSubDirsExcl), Space(0))

		* Tabuler les fichiers situés dans le répertoire indiqué et répondant au(x) masque(s)
		LOCAL lnMasks, lcMask, lnDocs
		LOCAL ARRAY laMasks[1], laDocs[1], laDocs1[1]
		m.lnMasks = ALines(m.laMasks, m.lcFileMasks, .T., VIRGULE)
		FOR EACH m.lcMask IN m.laMasks
			DIMENSION laDocs1[1]
			laDocs1[1] = .F.
			aDir(m.laDocs1,  m.lcDir + m.lcMask) && pas de dossier
			m.lnDocs = aAppend(@m.laDocs, @m.laDocs1)
		ENDFOR
		Asort(m.laDocs, 1)

		* Si recherche dans les sous-dossiers demandée,
		IF m.llSubDirs

			* Si sous-dossier(s) dans le dossier
			LOCAL lnSubDirs
			LOCAL ARRAY laSubDirs[1]
			m.lnSubDirs = aSubFolders(@m.laSubDirs, m.lcDir)
			IF m.lnSubDirs > 0

				* Ajouter les sous-dossiers au tableau de documents
				m.lnDocs = aAppend(@laDocs, @laSubDirs)

				* Tabuler les sous-dossiers à exclure éventuels
				LOCAL lnDirsExcl
				LOCAL ARRAY laDirsExcl[1]
				m.lnDirsExcl = aLines(m.laDirsExcl, m.lcSubDirsExcl, .T., VIRGULE)
			ENDIF
		ENDIF

		* Si le dossier comporte des documents
		IF m.lnDocs > 0

			* Préparer la chaine de paramètres à passer à la procédure
			LOCAL lnProcParms, lcProcParms, lnProcParm
			m.lnProcParms = Pcount() - 5 && les paramètres commencent en 6è position
			m.lcProcParms = Space(0)
			IF m.lnProcParms > 0
				FOR m.lnProcParm = 1 TO m.lnProcParms
					m.lcProcParms = m.lcProcParms + VIRGULE + 'm.tuProcParm' + Transform(m.lnProcParm)
				ENDFOR
			ENDIF

			* Pour chaque "document" (fichier ou sous-dossier)
			LOCAL lnDoc, lcDoc, lcDocAdr, llDoc
			FOR m.lnDoc = 1 to m.lnDocs
				m.lcDoc = laDocs[m.lnDoc, 1]
				m.lcDocAdr = m.lcDir + m.lcDoc

				* Si dossier exploitable, récurser le cas échéant
				IF 'D' $  Upper(laDocs[m.lnDoc, 5])
					IF m.llSubDirs ;
					 AND ! InList(m.lcDoc, '.', '..') ;
					 AND (m.lnDirsExcl = 0 OR Ascan(laDirsExcl, Upper(m.lcDoc)) = 0)
					 	m.lnResult = m.lnResult + ; && pour récursion
						 		Evaluate('FilesProc (m.lcDocAdr, m.tcProcName, m.lcFileMasks, m.llSubDirs, m.lcSubDirsExcl' + ;
						 												m.lcProcParms + ")")
					ENDIF

				* Sinon (fichier), appliquer la procédure indiquée
				ELSE
					m.llDoc = Evaluate(m.tcProcName + [("] + m.lcDocAdr + ["] + m.lcProcParms + ")")
					m.lnResult = m.lnResult + Iif(m.llDoc, 1, 0)
				ENDIF
			ENDFOR
		ENDIF
	ENDIF

	RETURN m.lnResult

	* -------------------------------
	PROCEDURE FilesProc_Test && Teste FilesProc
	
	? Sys(16)
	LOCAL lnFiles
	m.lnFiles = FilesProc(GetDir(Curdir(),'',"Où sont les fichiers Excel à traiter ?", 16), ;
							'FilesProc_Test_Proc', '*.xls',.T., '', Date())
	? Transform(m.lnFiles) + " Fichiers traités"



 Sources du même auteur

AUTOMATION DE WORD AVEC VFP
AAPPEND() AJOUTE LE CONTENU D'UN TABLEAU À UN AUTRE
ASUBFOLDERS() TABLEAU DES SOUS-DOSSIERS D'UN DOSSIER
CEUROANSI() CHAINE DE CARACTÈRES DÉSACCENTUÉE
VISUAL FOXPRO : PRÉSENTATION GÉNÉRALE

 Sources de la même categorie

RENOMMER LE PRÉFIXE DE TOUS LES FICHIERS D'UN DOSSIER par mike_vk
COULEUR HEXADECIMAL par tmcuh
Source avec Zip ITERATION par DDU de AtoutFox
CRYPTE/DECRYPTE par FredArmoni
CONTRÔLE DU NUMÉRO DE TVA (BELGE) par johnmary

 Sources en rapport avec celle ci

Source avec Zip LA GESTION D'UN SPLITTER EN NATIF FOX par delphifox
ASUBFOLDERS() TABLEAU DES SOUS-DOSSIERS D'UN DOSSIER par AbaqueInside
FONCTIONS UTILES SUR LES FICHIERS ET DOSSIERS AVEC WINDOWS S... par Mike Gagnon
COMMENT ÉNUMÉRER TOUS LES FICHIERS DANS UN DOSSIER AVEC WIND... par Mike Gagnon
C83ADDRESS() VERSION COURTE (8.3) DE L'ADRESSE D'UN FICHIER/... par AbaqueInside

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Gestion multifichiers [ par gh57 ] Quel est la commande qui permets d'effectuer une mise &#224; jour d'un fichier(dbf) avec celui d'un autre.J'ai essay&#233; la commande :UPDATE ON cham fichiers necessaires au vfpoledb ? [ par lijohann ] bonjour,j'ai une appli sous excel&nbsp;qui utilise le vfpoledb pour acc&#233;der &#224; mes don&#233;es.Mon probleme est que des utilisateurs doivent Gestion d'objet [ par spoutnic_37 ] Salutation, &nbsp;&nbsp;&nbsp; Mon probleme est le suivant : comment faire un ensemble de formulaire grace &#224; visual foxpro 6, et g&#233;rer les Application de gestion d'une caisse de bar [ par CaromTom ] Bonjour,Je cherche &#224; fabriquer une caisse de bar (&#233;dition de ticket,gestion de stock) avec VFP.Avez-vous des conseils ou des sources qui pou Vérification des fichiers en format .dbf [ par devham ] salut, je developpe en VB.net , mais cette fois je suis oblig&#233; &#224; faire une appliquation en VFP, l'objectif de cette appliquation c'est de ve fichiers d'installation [ par info_maroc ] Bonjour1 - j'ai developpe une application sous visual foxpro 9 et je veux creer les fichiers d'installation, j'ai pas sur le menu de foxpro un moyen p creer fichiers installation [ par info_maroc ] bonjour   j'ai besoin de la procedure de generation des fichiers installation d'une application developpée par visual foxpro 9Merci Manipulation de fichier texte [ par rr_style ] Salut a tous Moi j'ai un serieux problème avec FoxPro j'ai développé une interface qui converti des données d'un logiciel vers un autre. grace à l gestion melti utilsateur [ par bsmsadok ] <img style="BORDER-LEFT-COLOR: black; BORDER-BOTTOM-COLOR: black; BORDER-TOP-COLOR: black; BORDER-RIGHT-COLOR: black; border-size: 1px" src="http://ww Difference entre foxpro et visual foxpro [ par ducker88 ] &gt;Bonjour à tous,Voila deux ans que je travaille sur foxpro (tant bien que mal...) et j'apprend aujourd'hui qu'il est possible que la base ai été mi


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales