McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007
-
30 août 2007 à 07:53
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007
-
7 sept. 2007 à 01:09
SALUT,
J'ai un script qui parcour entierement un .txt
Il verifie si dans les lignes du fichier la chaine de charactère "error" ou "failed" existe
Si aucune de ces chaines n'existes un Msgbox indique "Il n'y a pas d'erreur"
Par contre si elles existent, je voudait qu'elle mémorise toute la ligne (attention pas le N° de la ligne mais la ligne entière) et la recopie dans un autre fichier texte, et ça pour toutes les lignes qui contiendra ces mots la (jusqu'à la fin du fichier).
Dim objFso, objTextStream
Dim strText, strTexte, i
Set objFso = CreateObject("Scripting.FileSystemObject")
'lecture du strFileText
Set objTextStream = objFso.OpenTextFile(strFileText, 1, False)
Do While Not objTextStream.AtEndOfStream
strFile = Split(objTextStream.ReadAll, vbCrLf)
strText = Filter(strFile , strChaine)
Loop
objTextStream.Close
If UBound(strText) >= 1 Then
Set objTextStream = objFso.OpenTextFile(strResult, 2, True)
For i = LBound(strText) To UBound(strText)
objTextStream.WriteLine strText(i)
Next
objTextStream.Close
End if
Set objTextStream = Nothing
Set objFso = Nothing
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 août 2007 à 08:53
Salut [auteurdetail.aspx?ID= 9517 JMO] ,
pourquoi cette boucle si tu fais un ReadAll
Do While Not objTextStream.AtEndOfStream
strFile = Split(objTextStream.ReadAll, vbCrLf)
strText = Filter(strFile , strChaine)
Loop
Merci pour m'avoir fait découvrir Filter @+: Ju£i?n Pensez: Réponse acceptée
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 30 août 2007 à 09:23
Re,
Entièrement raison Julien.
Dim objFso, objTextStream
Dim strText, strTexte, i
Set objFso = CreateObject("Scripting.FileSystemObject")
'lecture du strFileText
Set objTextStream = objFso.OpenTextFile(strFileText, 1, False)
strFile = Split(objTextStream.ReadAll, vbCrLf)
strText = Filter(strFile , strChaine)
objTextStream.Close
'Fonction qui detecte une erreur dans un fichier log
'**********************************************************
Function CTRLogError
Dim objFso, objTextStream
Dim i, strLine
Dim arrChaine()
ReDim arrChaine(0)
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile(FichierLog, 1)
Do While Not ObjTextStream.AtEndOfStream
strLine = ObjTextStream.ReadLine
If InStr(1, strLine, chaine1) <> 0 Or _
InStr(1, strLine, chaine2) <> 0Then
ReDim Preserve arrChaine(UBound(arrChaine) + 1)
arrChaine(UBound(arrChaine)) = strLine
End if
Loop
objTextStream.Close
Set objTextStream = objFso.OpenTextFile(Result, 2, True)
If UBound(arrChaine) <> 0 Then
For i=1 To UBound(arrChaine)
objTextStream.Write Trim(arrChaine(i)) &vbcrlf
Next
CTRLogError = "Une ou plusieurs erreurs ont été trouvées !"
Else
CTRLogError = "Pas d'erreur trouvée"
End If
objTextStream.Close
Set objFso = Nothing
Set objTextStream = Nothing
End function
jean-marc
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 30 août 2007 à 08:34
Salut,
Oui c'est tout a fait possible. voila en VB6 se que cela donnerait a peu pres.
A toi de voir si cela fonctionne en VBSript mais j'en doute.
Dim NumFile As Integer
Dim i As Integer
Dim Contenu As String
Dim Lignes() As String
NumFile = FreeFile
Open "C:\Source.txt" For Binary As NumFile
'on recupere le contenu
Contenu = String(LOF(NumFile), 0)
Get #NumFile, , Contenu
Close #NumFile
'on place le contenu dans un tableau
Lignes = Split(Contenu, vbCrLf)
NumFile = FreeFile
Open "C:\Destination.txt" For Append As NumFile
For i = LBound(Lignes) To UBound(Lignes)
If InStr(1, Lignes(i), "error") Or InStr(1, Lignes(i), "failed") Then
Print #NumFile, Lignes(i)
End If
Next
Close #NumFile, ----
[code.aspx?ID=41455 By Renfield]
NOTE: pour tes question futures en VBSCRIPT penses a poster dans la section correcte qui est
[infomsg.aspx Thèmes]
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 30 août 2007 à 22:40
Bonsoir à tous,
[auteurdetail.aspx?ID=1133125 McDEV04]
,
Attention:
N'ayant pas clairement précisé ton language utilisé, tu as une proposition en vb6 et l'autre en vbs.
Manque plus qu'une proposition en .Net
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007 30 août 2007 à 23:20
Si Si c'est préciser dans mon sujet, mais en tout cas merci à vous pour l'aide, sa fonctionne.
Je suis en train de travailler dessus, je test les deux solutions et l'adapte à mon programme.
Dés que j'aurais finie mon programme je le publierait et je pense qu'il servira à de nombreux administrateur de réseau, encor une fois s'il fonctionne????
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007 31 août 2007 à 01:15
Information :
On est le vendredi 31 / 08 et il est 9 h du matin chez moi, chez vous je vois qu'il se fait tard, alors je vous souhaite bonne soirée XD et à demain ou tout taleur
en attendant je vous envoie ceci, qui est la suite de mes recherches par rapport à vos message :
------------------------------------------------------------------------------------------
Et si je recherche deux chaines??
j'ai bien voulu utiliser la fonction FLTER, mais je n'arrive pas pour la recherche de deux chaines différentes, j'ai du alors faire comme ça. Mais çà bug, je continue de chercher....
'Fonction qui detecte une erreur dans un fichier log
'**********************************************************
Function CTRLogError(chaine1,chaine2,fichierLog)
'Déclaration variable
Dim objFso, objFile,objTextStream
Dim strFile, i
'déclaration Des constantes
Const strResult = "c:\mytest\Rapport\Error.txt"
'instantation
Set objTextStream = objFso.OpenTextFile(fichierlog, 1, False)
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile( fichierLog, 1)
strFile = objFile.ReadAll
objFile.Close
'Recherche de chaine de charactère "error" et failed dans le fichier
If UBound(Split(strFile, chaine1)) <> 0 And _
UBound(Split(strFile, chaine2)) <> 0 Then
'Si trouvé alors un smgbox apparait et il enregistre la ligne dans error.tx
CTRLogError = "Une erreur à était trouvé !"
Set objTextStream = objFso.OpenTextFile(strResult, 2, True)
For i = LBound(strfile) To UBound(strfile)
objTextStream.WriteLine strfile(i)
Next
objTextStream.Close
Else
'Sinon pas d'erreur
CTRLogError = "Pas d'erreur trouvé"
End If
Set objFile = Nothing
Set objFso = Nothing
End Function
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 31 août 2007 à 06:10
Bonjour à tous,
Plusieurs petites corrections:
'Fonction qui detecte une erreur dans un fichier log
'**********************************************************
Function CTRLogError(chaine1,chaine2,fichierLog)
'Déclaration variable
Dim objFso, objFile,objTextStream
Dim strFile, i
'déclaration Des constantes
Const strResult = "D:\SCRIPTS\Fichiers\Error.txt"
'Const strResult = "c:\mytest\Rapport\Error.txt"
'instantation
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile( fichierLog, 1)
strFile = objFile.ReadAll
objFile.Close
'suppression du fichier Error.txt
If objFso.FileExists(strResult) Then objFso.DeleteFile(strResult)
'Recherche de chaine de charactère "error" et failed dans le fichier
If UBound(Split(strFile, chaine1)) >= 1 And _
UBound(Split(strFile, chaine2)) >= 1 Then
'Si trouvé alors un msgbox apparait et il enregistre la ligne dans error.txt
CTRLogError = "Une erreur a été trouvée !"
Set objTextStream = objFso.OpenTextFile(strResult, 2, True)
objTextStream.WriteLine "la chaine " & chaine1 & _
" et la chaine " & chaine2 & " ont été trouvées au moins 1 fois"
objTextStream.Close
Set objTextStream = Nothing
Else
'Sinon pas d'erreur
CTRLogError = "Pas d'erreur trouvé"
End If
Set objFile = Nothing
Set objFso = Nothing
End Function
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007 3 sept. 2007 à 05:16
Bonjour tous le monde
C'est super mais tu as enlever une partie essentiel du script. Celui qui recopiait toutes les lignes où était situé les chaine "error" et "failed" dans un fichier error.txt
'Fonction qui detecte une erreur dans un fichier log
'**********************************************************
Function CTRLogError(chaine1,chaine2,fichierLog)
'Déclaration variable
Dim objFso, objFile,objTextStream
Dim strFile, i
'déclaration Des constantes
Const strResult = "c:\mytest\Rapport\Error.txt"
'instantation
Set objTextStream = objFso.OpenTextFile(fichierlog, 1, False)
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile( fichierLog, 1)
strFile = objFile.ReadAll
objFile.Close
'Recherche de chaine de charactère "error" et failed dans le fichier
If UBound(Split(strFile, chaine1)) <> 0 And _
UBound(Split(strFile, chaine2)) <> 0 Then
'Si trouvé alors un smgbox apparait et il enregistre la ligne dans error.tx
CTRLogError = "Une erreur à était trouvé !"
Set objTextStream = objFso.OpenTextFile(strResult, 2, True)
For i = LBound(strfile) To UBound(strfile)
objTextStream.WriteLine strfile(i)
Next
objTextStream.Close
Else
'Sinon pas d'erreur
CTRLogError = "Pas d'erreur trouvé"
End If
Set objFile = Nothing
Set objFso = Nothing
End Function
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007 3 sept. 2007 à 08:43
OUI c'est tout à fait ça
en faite les fichier log recevra les lignes ou est situé les mots error ou failed
EXEMPLE
ceci est le fichier log.txt:
Gathering IPX configuration information.
Querying status of the Netcard drivers... Passed
Testing Domain membership... Passed
Gathering NetBT configuration information.
Testing for autoconfiguration... Failed
Testing IP loopback ping... Passed
Testing default gateways... Failed
Enumerating local and remote NetBT name cache... Passed
Testing the WINS server
Connexion au réseau local
There is no primary WINS server defined for this adapter.
There is no secondary WINS server defined for this adapter.
Gathering Winsock information.
Testing DNS
PASS - All the DNS entries for DC are registered on DNS server '127.0.0.1' and other DCs also have some of the names registered.
Testing redirector and browser... Error
Testing DC discovery.
Looking for a DC
et voilà ce que devra contenir le fichier ERROR.txt :
Testing for autoconfiguration... Failed
Testing default gateways... Failed
Testing redirector and browser... Error
mais en faite si il y a un retour à la ligne dans le fichier log, pfoaaa j'y avait pas pensée
Bon tant pis, faisant comme s'il n'y en avait pas..
en tout cas merci ...
McDEV04
Messages postés42Date d'inscriptionvendredi 24 août 2007StatutMembreDernière intervention 1 octobre 2007 4 sept. 2007 à 23:56
Bonjour, la france bonjour tout le monde
une dernière petite chose SVP.
Pour réinitialiser "arrchaine" je doit faire une boucle???
En faite je resume :
* le script lance un .exe
* puis l'.exe genere un .txt
* j'analyse le .txt avec le script qui recherche les lignes
* et ces lignes sont enregistré dans un autre fichier
* juste aprés je relance un utilitaire
* paraile il génère un .txt que j'analyse avec le meme script de recherche
!!!!! et là; comme les variables ne sont pas réinitialiser il réécrit les erreurs précédent
voilà le code :
Option Explicit
On Error Resume Next
'Declaration de variable
Dim Ofso,Objshell, return, WshShell, fileresult, filehtml, FichierAnalyser, objTextStream, i, strLine
Dim arrChaine()
ReDim arrChaine(0)
Set Objshell = CreateObject ("Wscript.shell")
Set Ofso = CreateObject ("Scripting.filesystemObject")
Set fileresult = Ofso.createtextFile ("c:\mytest\CTRL_AD\LOG\log.txt")
'execution DCdiag.exe
'Cette ligne de commande permet d'enregistrer les action effectué par DCDiag dans c:\mytest\CTRL_AD\LOG\DCdiag\DCdiaglog.txt
return = objshell.run ("c:\mytest\CTRL_AD\LOG\DC_diag\dcdiag /e /a /f:\mytest\CTRL_AD\LOG\DC_Diag\DCdiaglog.txt",,true)
WScript.Sleep pause1
'Cette ligne de commande enregistre les erreurs dans c:\mytest\TRL_AD\LOG\DC_Diag\DCdiagerror.txt
return = objshell.run ("c:\mytest\CTRL_AD\LOG\DC_diag\dcdiag /e /a /ferr:\mytest\CTRL_AD\LOG\DC_Diag\DCdiagerror.txt",,true)
WScript.Sleep pause1
fileresult.WriteLine "DC_diag c'est terminé avec succés à : "& Time()
'Analyser le fichier log de DC diag
FichierAnalyser = ("c:\mytest\CTRL_AD\LOG\DC_Diag\DCdiaglog.txt")
Fileresult.WriteBlankLines (1)
Fileresult.WriteLine "Analyse du fichier : " & FichierAnalyser
Fileresult.writeline "----------------------------------------"
WScript.Sleep = pause2
'Boucle qui va mémoriser les lignes où est situé l'erreur
Set objTextStream = oFso.OpenTextFile(FichierAnalyser, 1)
Do While Not ObjTextStream.AtEndOfStream
strLine = ObjTextStream.ReadLine
If InStr(1, strLine, chaine1) <> 0 Or _
InStr(1, strLine, chaine2) <> 0 Then
ReDim Preserve arrChaine(UBound(arrChaine) + 1)
arrChaine(UBound(arrChaine)) = strLine
End If
Loop
objTextStream.Close
'Ecriture des erreurs repéré dans le fichier DCdialog.txt dans le fichier fileresult
Set objTextStream = objFso.OpenTextFile(fileResult, 2, True)
If UBound(arrChaine) <> 0 Then
fileresult.WriteLine "Une ou plusieurs erreurs ont été trouvées !"
fileresult.writeline "-------------------------------------------"
fileresult.WriteBlankLines (1)
fileresult.WriteLine " ERREURS : "
fileresult.writeline "........."
fileresult.writeblanklines (1)
fileresult.writeblanklines (1)
For i=1 To UBound(arrChaine)
' trim Retourne une copie de la chaîne sans les espaces situés au début et à la fin
' VbCrLf permet un retour à la ligne
Fileresult.Write Trim(arrChaine(i)) &VbCrLf
fileresult.writeblanklines (1)
Next
Else
fileresult.WriteLine "Aucune erreures n'a été trouvé ! "
fileresult.writeline "--------------------------------"
End If
objTextStream.Close
Set objFso = Nothing
Set objTextStream = Nothing
fileresult.WriteBlankLines (1)
fileresult.WriteBlankLines (1)
fileResult.WriteLine "Fin de l'analyse DCdiag à: " & Time()
fileresult.writeline "-----------------------------------"
arrChaine = ""
fileReesult.writeBlankLines(1)
fileresult.WriteBlankLines(1)
WScript.Sleep pause1
fileresult.WriteLine ("_________________________________________________________________________________________________")
fileresult.WriteBlankLines (1)
fileresult.WriteLine "Etape 2 : Test de connectivité réseau"
fileresult.WriteLine "-------------------------------------"
fileresult.writeblanklines (1)
fileresult.WriteLine "Execution NETDiag à : " & Time ()
return = Objshell.Run ("c:\mytest\CTRL_AD\LOG\Netdiag\netdiag /l",,true)
'Déplace le fichier dans le dossier c:\mytest\CTRL_AD\LOG\Netdiag
Ofso.MoveFile "c:\mytest\CTRL_AD\netdiag.log", "c:\mytest\CTRL_AD\LOG\Netdiag\netdiag.log "
fileresult.writeline "NETDiag c'est terminé avec succés à : " & Time
'MsgBox ("ok")
'Analyser le fichier log de DC diag
FichierAnalyser = ("c:\mytest\CTRL_AD\LOG\Netdiag\netdiag.log")
fileresult.WriteBlankLines (1)
Fileresult.WriteLine "Analyse du fichier : " & FichierAnalyser
fileresult.writeline "---------------------------------------"
'Partie analyse du fichier
' Boucle qui va mémoriser les lignes où est situé l'erreur
Set objTextStream = oFso.OpenTextFile(FichierAnalyser, 1)
Do While Not ObjTextStream.AtEndOfStream
strLine = ObjTextStream.ReadLine
If InStr(1, strLine, chaine1) <> 0 Or _
InStr(1, strLine, chaine2) <> 0 Then
ReDim Preserve arrChaine(UBound(arrChaine) + 1)
arrChaine(UBound(arrChaine)) = strLine
End If
Loop
objTextStream.Close
'Ecriture des erreurs repéré dans le fichier DCdialog.txt dans le fichier fileresult
Set objTextStream = objFso.OpenTextFile(fileResult, 2, True)
If UBound(arrChaine) <> 0 Then
fileresult.WriteLine "Une ou plusieurs erreurs ont été trouvées !"
fileresult.writeline "------------------------------------------"
fileresult.writeblanklines (1)
fileresult.WriteLine " ERREURS : "
fileresult.writeline "..........."
fileresult.writeblanklines (1)
fileresult.writeblanklines (1)
For i=1 To UBound(arrChaine)
' trim Retourne une copie de la chaîne sans les espaces situés au début et à la fin
' VbCrLf permet un retour à la ligne
Fileresult.Write Trim(arrChaine(i)) &VbCrLf
fileresult.writeblanklines (1)
Next
Else
fileresult.WriteLine "Aucune erreures n'a été trouvé ! "
fileresult.writeline "----------------------------------"
End If
objTextStream.Close
Set objFso = Nothing
Set objTextStream = Nothing
fileresultblanklines (1)
fileresult.WriteLine "Fin de l'analyse de NetDiag à : " & Time