Soyez le premier à donner votre avis sur cette source.
Vue 6 203 fois - Téléchargée 476 fois
' ************************************************************************************************* ' Auteur: Alain BENOIST ' Date : Juillet 2011 ' ************************************************************************************************* option explicit ' ************************************************************************************************* ' ' Déclaration des variables et constantes ' ' ************************************************************************************************* dim arrayExt(1) ' Tableau des extentions de fichiers à scruter redim arrayFile(0) ' Tableau des fichiers à scruter, en fonction des extentions déclarées redim arrayReport(0) ' Tableau de rapport renseigné lors du traitement dim i ' compteur de boucle ' Constante des termes à rechercher dans les lignes de code HTML (en minuscule pour la comparaison) const constStrRemDebut = "<!--" const constStrInclude = "include=" const constStrExtInc = ".inc" const constStrRemFin = "-->" const constFileReport = "Report.txt" ' Fichier de rapport des opérations effectuées ' ########################################################################################################### ' ############################# ######################### ' ############################# Vous pouvez modifier ces valeurs à votre convenance ######################### ' ############################# ######################### ' ########################################################################################################### arrayExt(0) = "html" ' Extention des fichiers à scruter (plusieurs extentions possibles) const constPathSource = "." ' Répertoire source des fichiers à scruter ("." = répertoire courant) const constPathDestin = "temp" ' Répertoire destination des fichiers modifiés ("." = répertoire courant) ' ########################################################################################################### ' *** Recherche des fichiers à scruter dans le répertoire spécifié par constPathSource if FolderExist(constPathSource) then SearchFileByExt constPathSource, arrayExt, arrayFile, false ' true = recherche également dans les sous-répertoires else msgbox "Le répertoire [" & constPathSource & "] n'existe pas..." wscript.quit end if ' *** Tri du tableau de fichiers à analyser Tri_QuickSort arrayFile, true, true ' *** Affichage des noms des fichiers à analyser dans un msgbox 'ShowArrayInMsgbox arrayFile, 0 ' *** Création du répertoire de destination des fichiers modifiés spécifié par constPathDestin ' *** s'il est différent du répertoire courant (true = on efface le répertoire pour le recréer) if not CreateFolder(constPathDestin, true) then msgbox "Erreur dans la création du répertoire [" & constPathDestin & "]..." wscript.quit end if ' *** Préparation du fichier de rapport DeleteFile constFileReport AddTxtFile constFileReport, "Include.vbs - Rapport de traitement du " & Date() & " à " & Time() & vbCrLf AddTxtFile constFileReport, "Répertoire courant : " & CurrentFolder(true) AddTxtFile constFileReport, "Répertoire d'analyse : " & constPathSource AddTxtFile constFileReport, "Répertoire d'écriture : " & constPathDestin AddTxtFile constFileReport, vbCrLf & string(20, "-") & vbCrLf AddTxtFile constFileReport, "Fichier(s) à traiter : " & UBound(arrayFile) & vbCrLf dim nbDigit nbDigit = len(FormatNumber(UBound(arrayFile), 0)) for i = 0 To UBound(arrayFile) - 1 AddTxtFile constFileReport, "[" & FormatInteger(i + 1, nbDigit) & "]" & " " & arrayFile(i) next AddTxtFile constFileReport, "" ' *** Boucle de traitement des fichiers contenus dans le tableau arrayFile dim nbSuccess, nbNoInclude, nbFailure nbSuccess = 0 nbNoInclude = 0 nbFailure = 0 for i = 0 to UBound(arrayFile) - 1 redim arrayReport(0) AddValueInArray arrayReport, string(20, "-") AddValueInArray arrayReport, "" TraiteIncludeInFile arrayFile(i), constPathDestin & "\" & GetFilename(arrayFile(i)), arrayReport AddValueInArray arrayReport, "" WriteArrayInFile arrayReport, -1, -1, constFileReport next ' *** Affichage du rapport de traitement AddTxtFile constFileReport, string(20, "-")& vbCrLf AddTxtFile constFileReport, "Réussite : " & FormatInteger(nbSuccess, nbDigit) AddTxtFile constFileReport, "Pas d'include : " & FormatInteger(nbNoInclude, nbDigit) AddTxtFile constFileReport, "Echec : " & FormatInteger(nbFailure, nbDigit) AddTxtFile constFileReport, "Total : " & FormatInteger(nbSuccess + nbNoInclude + nbFailure, nbDigit) & "/" & UBound(arrayFile) AddTxtFile constFileReport, string(20, "-")& vbCrLf AddTxtFile constFileReport, "Fin du traitement (" & Time() & ")" ViewTxtFile constFileReport ' *** Fin du programme wscript.quit ' ************************************************************************************************* ' ' Routine de traitement des fichiers ' ' ************************************************************************************************* ' ' TraiteIncludeInFile ' ' Traitement des fichiers afin de remplacer les lignes balisées par Include ' ' Entrée: FilenameSource - nom du fichier à analyser ' FilenameDestin - nom du fichier généré ' TabReport - tableau intégrant les lignes de rapport sur le traitement ' ' Sortie: TabReport - le tableau de rapport est transmis par référence ' ' Nota: ' ' Mode opératoire ' --------------- ' 1°) Ajout de l'extention ".tmp" au fichier destination ' 2°) Analyse de chaque ligne du fichier source jusqu'à trouver la 1° balise "<!-- Include=Inc\xxxx.inc -->" ' sinon on écrit la ligne dans le fichier temporaire ' 3°) Si la ligne est trouvée, on teste l'existence du fichier xxxx.inc ' 4°) Si le fichier existe, on parcours le fichier source jusqu'à trouver la 2° ligne (même nom de fichier inc) ' Les lignes sources ne sont plus recopiées puiqu'elles seront remplacées ' 5°) Si la 2° balise est trouvée, on procède à l'inclusion du fichier xxxx.inc ' 6°) Les cas d'erreur suivants sont testés: ' - pas de balise include ' - une seule balise include ' - le fichier à inclure n'existe pas ' 7°) En cas d'erreur, le fichier source n'est pas modifié ' 8°) En cas de réussite, le fichier destination est renommé de .tmp en son nom initial: ' - soit dans un répertoire temporaire si celui-ci est défini dans la constante "constPathDestin" ' Les fichiers sources ne sont pas modifiés, les fichiers générés devront être recopiés ' - soit il remplace le fichier d'origine si "constPathDestin" est déclaré "." ' ' ************************************************************************************************* sub TraiteIncludeInFile(FilenameSource, FilenameDestin, byref TabReport) dim oFsRead, oFtxtRead dim oFsWrite, oFtxtWrite dim Line, LineReduced, FileNameInclude, PathFileNameInclude, LenFileNameInclude, flagInclude, flagSuccess, NbInclude, strReport dim OccurenceRemDebut, OccurenceInclude, OccurenceFileName, OccurenceInc, OccurenceRemFin 'instanciation pour la lecture du fichier (source) set oFsRead = CreateObject("Scripting.FileSystemObject") set oFtxtRead = oFsRead.OpenTextFile(FilenameSource) 'instanciation pour l'écriture dans le fichier FilenameDestin.tmp (destination) set oFsWrite = CreateObject("Scripting.FileSystemObject") set oFtxtWrite = oFsWrite.CreateTextFile(FilenameDestin & ".tmp", true) ' true = Ecrase 'on parcours chaque ligne du fichier texte source NbInclude = 0 flagSuccess = true do while not oFtxtRead.AtEndOfStream Line = oFtxtRead.Readline LineReduced = Replace(LCase(Line)," ", "") OccurenceRemDebut = InStr(LineReduced, constStrRemDebut) OccurenceInclude = InStr(LineReduced, constStrInclude) OccurenceInc = InStr(LineReduced, constStrExtInc) OccurenceRemFin = InStr(LineReduced, constStrRemFin) ' recherche de la ligne de début de l'Include dans le fichier source flagInclude = false strReport = FilenameSource if OccurenceRemDebut > 0 and OccurenceInclude > OccurenceRemDebut and OccurenceInc > OccurenceInclude and _ OccurenceRemFin > OccurenceInc then NbInclude = NbInclude + 1 LenFileNameInclude = OccurenceInc - (OccurenceInclude + Len(constStrInclude)) FileNameInclude = LCase(Mid(LineReduced, OccurenceInclude + Len(constStrInclude), LenFileNameInclude) & constStrExtInc) PathFileNameInclude = constPathSource & "\" & FileNameInclude strReport = strReport & " [" & PathFileNameInclude & "]" ' si le fichier à inclure existe, on recherche la ligne de fin de l'include if FileExist(PathFileNameInclude) then ' recherche de la ligne de fin de l'Include dans le fichier source do while (Not oFtxtRead.AtEndOfStream) and not flagInclude Line = oFtxtRead.Readline LineReduced = Replace(LCase(Line)," ", "") OccurenceRemDebut = InStr(LineReduced, constStrRemDebut) OccurenceInclude = InStr(LineReduced, constStrInclude) OccurenceFileName = InStr(LineReduced, FileNameInclude) OccurenceInc = InStr(LineReduced, constStrExtInc) OccurenceRemFin = InStr(LineReduced, constStrRemFin) if OccurenceRemDebut > 0 and OccurenceInclude > OccurenceRemDebut and OccurenceFileName > OccurenceInclude and _ OccurenceInc > OccurenceFileName and OccurenceRemFin > OccurenceInc then flagInclude = true AppendTxtOpenFile oFtxtWrite, PathFileNameInclude strReport = strReport & " Ok" AddValueInArray TabReport, strReport end if loop if not flagInclude then strReport = strReport & " Le second Include n'a pas été trouvé, arrêt du traitement." AddValueInArray TabReport, strReport flagSuccess = false end if else strReport = strReport & " Ce fichier n'existe pas." AddValueInArray TabReport, strReport flagSuccess = false end If else oFtxtWrite.WriteLine(Line) end if loop oFtxtRead.Close set oFsRead = nothing oFtxtWrite.Close set oFsWrite = nothing if NbInclude = 0 then nbNoInclude = nbNoInclude + 1 strReport = strReport & " Pas d'Include dans ce fichier." AddValueInArray TabReport, strReport DeleteFile FilenameDestin & ".tmp" else if flagSuccess then nbSuccess = nbSuccess + 1 AddValueInArray TabReport, "********** Réussite: le fichier [" & FilenameDestin & "] a été mis à jour" RenameFile FilenameDestin & ".tmp", FilenameDestin, true else nbFailure = nbFailure + 1 AddValueInArray TabReport, "********** Echec: le fichier [" & FilenameDestin & "] n'a pas été modifié" DeleteFile FilenameDestin & ".tmp" end if end if end sub ' ************************************************************************************************* ' ' Procédures et fonctions du programme ' ' ************************************************************************************************* Les procédures sont dans le fichiers ZIP
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.