Problème pour Importer des infos à partir de plusieurs fichier TXT dans une feui
odimenokyo
Messages postés3Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention26 janvier 2007
-
26 janv. 2007 à 00:09
odimenokyo
Messages postés3Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention26 janvier 2007
-
26 janv. 2007 à 17:19
Bonsoir,
Je tiens à signaler que je suis complètement novice et que j'apprends le VBscript.
J'ai récupéré un script qui permet de récupérer sur de multiple serveurs (liste de serveurs) des infos précises à partir d'un fichier txt en l'occurence le fichier le plus récent et de les exporter vers un fichier Excel. Le script en lui même fonctionne mais il y a un problème.
Exemple :
Server1
>> dans le répertoire 'c:\rep' il y a plusieurs fichiers marqué : 'BEX012.txt', 'BEX013.txt', 'BEX014.txt', 'BEX015.txt'.... Il peut y avoir un ou deux fichiers crées chaque jour....
Server2
>> dans le répertoire 'c:\rep' il y a plusieurs fichiers marqué : 'BEX015.txt', 'BEX023.txt', 'BEX024.txt', 'BEX025.txt'.... Il peut y avoir un ou deux fichiers crées chaque jour....
et ainsi de suite sur plusieurs serveurs...
Le but est de récupérer à chaque fois sur chaque serveur les infos du dernier fichier txt créé sans forcément tenir compte du nom de fichier.
Mon problème :
Quand je lance le script, il va vérifier le premier serveur, récupère bien les infos désirées du dernier fichier créé (par exemple 'BEX015.txt') et les incères dans la feuille Excel. Tout se passe bien !!
Là le problème commence, quand il passe sur le second serveur, le script ne vas plus vérifier le dernier fichiers créé mais se base sur le nom du fichier du premier serveur vérifié (BEX015.txt) alor que le dernier fichier créé se nomme 'BEX025.txt' (ou un autre nom). Et ainsi de suite pour tous les autres serveurs.
Voici le code :
****************************************************
Dim ExcelSheet
Dim Age
Dim TextStream
Dim fileObj
Dim Fso
Dim strLatestFile
Dim DateInfo
Dim DiffADate
Dim msg
Dim strPath
Dim strSaveFolder
Dim NewAge
on error resume next
'
' the backup exec folder containing the logs must be shared as 'bx$'
' LIST OF SERVER TO BE CHECKED, list then as <server> not [file://\\<server \\<server]>
' one per line...
strPath = "c:\scripts\servers.txt"
'require folder 'strSaveFolder' to store excel sheets
Set Fso = CreateObject("scripting.FileSystemObject")
If (Fso.FileExists(strPath)) Then
Set ServerList = Fso.OpenTextFile(strPath, 1)
Else
MSGBOX "we need a list of servers guys!"
End If
Do Until ServerList.AtEndOfLine = True
strServer = ServerList.ReadLine
strPath = "\" & strServer & "\bx$"
If (Fso.FolderExists(strPath)) Then
Set folderObj = Fso.GetFolder(strPath)
Else
ExcelSheet.ActiveSheet.Cells(Row, 2).Value = strServer
ExcelSheet.ActiveSheet.Cells(Row, 3).Value = "No BX$ share on server"
End If
Set fileContainer = folderObj.Files
For Each fileObj In fileContainer
strRt = Right(fileObj.Name, 3)
If strRt = "txt" Then
strFile = fileObj.Name
DiffADate = DateDiff("d",fileObj.DateCreated,Now)
NewAge = DiffADate
If (NewAge < Age=true) or (Age="") Then
strLatestFile = fileObj.Name
Age = NewAge
End If
End If
Next
strPath = strPath & "" & strLatestFile
set fileObj = Fso.GetFile(strPath)
Set TextStream = fileObj.OpenAsTextStream(1)
ExcelSheet.ActiveSheet.Cells(Row, 1).Value = strServer
col = col + 1
ExcelSheet.ActiveSheet.Cells(Row, 3).Value = "failed..."
Do While Not textstream.AtEndOfStream
Str = textstream.ReadLine
posErr = InStr(Str, "^ ")
posEnd = InStr(Str, "b ended:")
posCom = InStr(Str, "completed on")
posStatus = InStr(Str, "completion status:")
If posCom <> 0 Then
Str = Mid(Str, 8, 35)
ExcelSheet.ActiveSheet.Cells(Row, 2).Value = Str
ExcelSheet.ActiveSheet.Cells(Row, 3).Value = "pending tape change"
End If
If posEnd = 3 Then
Str = Mid(Str, 12, 50)
ExcelSheet.ActiveSheet.Cells(Row, 2).Value = Str
End If
If posStatus = 5 Then
Str = Mid(Str, 24, 35)
ExcelSheet.ActiveSheet.Cells(Row, 3).Value = Str
End If
If posErr <> 0 Then
ExcelSheet.ActiveSheet.Cells(Row, 4).Value = LastStr
col = col + 1
End If
LastStr = Str
Loop
Str = ""
LastStr = ""
Row = Row + 1
Loop
If (Fso.FolderExists(strSaveFolder)) Then
strSaveAs = Date
strSaveAs = Replace(strSaveAs, "/", "-")
strSaveAs = "c:\backuplogs" + strSaveAs + ".xls"
ExcelSheet.SaveAs strSaveAs
Else
MsgBox "No C:\backuplogs folder on this server", vbInformation
End If
**************************************************************
MERCI à vous tous pour votre aide et ce que vous allez m'apprendre, moi je retourne à mes tutoriaux et continue à chercher.
Odi
A voir également:
Problème pour Importer des infos à partir de plusieurs fichier TXT dans une feui
Dim fso, dossier, fichiers, fileItem
Dim fichier, i,imax, z, valeur, cible, resultat
imax = 0
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier = fso.GetFolder(Path_Server)
Set fichiers = dossier.Files
'début de l'énumération des fichiers
For Each fichier In fichiers If Left(fichier.Name, 6) "DIA7LM" And UCase(Right(Fichier,3)) "MDB" Then
Set fileItem = fso.GetFile(fichier)
'--- Tri chronologique des fichiers (des + récents aux + anciens) ---
Do
Valeur = 0
For i = 1 To imax - 1
If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
For z = 1 To 2
Cible = Tableau(z, i)
Tableau(z, i) = Tableau(z, i + 1)
Tableau(z, i + 1) = Cible
Next
Valeur = 1
End If
Next
Loop While Valeur = 1
End If
Next
If imax=0 Then MsgBox "Repertoire vide - abandon du traitement" : WScript.Quit
MsgBox Tableau(1, 1) & vbTab& Tableau(2, 1),,"fichier le + récent du repertoire " & Path_Server
'For i = 1 To imax
' Tableau(1, i) = DIA7LM12,mdb puis 11 etc...
' MsgBox Tableau(1, i),,"Tableau(1, i)" & " " & i
' resultat = resultat &vbCrLf& Tableau(1, i) & vbTab& Tableau(2, i)
' MsgBox resultat
' If i = imax Then MsgBox resultat,,"liste triée"
'Next
Set fso = Nothing
Set dossier = Nothing
Set fichiers = Nothing
odimenokyo
Messages postés3Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention26 janvier 2007 26 janv. 2007 à 10:28
Bonjour Jean-Marc,
Merci d'avoir répondu si vite !!
La boucle, je l'ai vérifié et elle récupère bien le fichier '****.txt' le plus récent, mais la boucle, elle est faite qu'une seule fois finalement puisque par la suite il reprend ce même nom de fichier '****.txt qu'il a trouvé sur le premier serveur. En tout cas tu as bien vu là où était le problème, finalement, il faudrait qu'à chaque fois sur chaque serveur il refasse la boucle.....
strPath = "\" & strServer & "\bx$"correspond en fait à un répertoire partagé sur chaque serveur, c'est le fameux répertoire où se trouve les fichiers '*****.txt' sur chaque serveur, et moi pour vous demander de l'aide, dans ma première explication je l'avais remplacer par "dans le répertoire 'c:\rep' ". en tout cas bien vue....
Je vais voir ce que je peux faire avec ce que tu m'as apporté et comment l'inégrer.
odimenokyo
Messages postés3Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention26 janvier 2007 26 janv. 2007 à 17:19
Rebonjour Jean-Marc,
en fait il manquait une init des variables à l'entrée de la boucle serveur
il fallait que je rajoute après le "Do Until ServerList.AtEndOfLine = True"
Age=""
NewAge=""