yannock | Bonjour a toutes et tous,
Ca fait un petit bout de temps que je cherche une solution à mon problème mais n'etait pas très doué en prog. et n'ayant pas assez de temps pour m'y plonger réelement à fond je me permet de vous demander de l'aide.
La situation :
Je doit verifier rapidement le bon fonctionnement de mes routeurs (@work).
dans un premier temps, pour faire simple, j'ai crée un .bat qui fait des pings (ping -n 1 x.y.z.a) et qui ecrit ca dans un fichier resultat sur c:
Le resutlat est peu lisible, je me suis donc mis en tete de le modifier, tout d'abord en essayant avec la commande findstr des .bat traditionnel, mais c'est pas très pratique.
Je me suis dit que vbs me permetrait de le faire j'ai donc essayer plusieurs trucs et est resortit ceci :
Code :
- Dim FSO
- Set FSO = CreateObject("Scripting.FileSystemObject" )
- Set Fichier = FSO.OpenTextFile("c:\ping.txt" )
- Do While Not Fichier.AtEndOfStream
- Var = Fichier.Readline
- C'est la que je coince, il faudrait que je teste le debut du texte et si celui ci est un des 4 cas qui ne m'interresse pas, je voudrait supprimer cette ligne. Les cas que je veut gérer sont :
- debut = Ping
- ou debut = Paquets
- ou debut = Dur
- ou debut = Minimum
- Loop
- Fichier.Close
|
Je me doute qu'il existe une methode qui efface une ligne mais je trouve pas ...
Sinon je pensait faire une copie des ligne qui m'interesse (avec Fichier.WriteLine) si le debut de la ligne ne correspond pas mais la encore c'est ce test qui me pose problème.
J'ai bien trouver quelque chose sur un site de codes sources (vbfrance) mais j'ai du mal a analyser le code et en plus il se plante.
Le voici (pour info)
Code :
- '********************
- 'Principe de la fonction :
- 'Si le paramètre DelLinesNumbers est vrai alors
- ' on extrait dans Line les numéros des lignes à supprimer
- ' et on les supprime
- 'sinon
- ' si le param JustOneEvent est vrai alors
- ' on cherche la première occurence de Line dans le fichier, on la supprime et on s'arrete
- ' sinon
- ' on cherche toutes les occurences de Line dans le fichier et on les supprime toutes
- '
- 'Si testalltheline est vrai, il faut que la ligne du fichier lue soit exactement
- 'pareille à la line passée en paramètre, sinon une simple occurence suffit
- '
- 'Si Ucase est vrai alors on met Line et la ligne lue en majuscule lors de la comparaison
- '(ex. : PomPomPom =! pompompom mais POMPOMPOM = POMPOMPOM )
- '
- '
- 'Si NewFile est différent de "" alors on crée un nouveau fichier qui ne sera pas supprimé
- 'a la fin de la fonction, et on ne modifie pas l'original
- '
- 'Si la fonction échoue, elle renvoie Faux
- '
- 'Pour supprimer une ligne dans un fichier texte
- 'on copie toutes les autres lignes dans un fichier temporaire.
- '*********************
- '
- '
- 'Le param Line doit contenir soit le texte de la ligne a supprimer, soit les numéros
- 'des ligens a supprimer séparés par ; ex. "3;7;15;150"
- '
-
-
- 'On déclare la fonction.
- Public Function DelLineInFile(ByVal FilePath As String,_
- ByVal Line As String,_
- ByVal DelLinesNumbers As Boolean,_
- Optional ByVal JustOneEvent As Boolean = False,_
- Optional ByVal TestAllTheLine As Boolean = False,_
- Optional ByVal UCase As Boolean = False,_
- Optional ByVal NewFile As String = vbNullString) As Boolean
-
- 'On Error GoTo err
-
- Dim fSource As Integer 'Référence au fichier source
- Dim fTarget As Integer 'Référence au fichier cible
- Dim TempFile As String 'Variable qui contient le chemin du fichier temporaire
- Dim LineToCopy As String 'La ligne à copier dans le fichier
-
- 'On obtient de FreeFile une référence de fichier libre
- 'pour le fichier source
- fSource = FreeFile()
-
- 'On ouvre le fichier source en mode lecture et en acces partagé
- FileOpen(fSource, FilePath, OpenMode.Input, OpenAccess.Read, OpenShare.Shared)
-
-
- 'On obtient de FreeFile une référence de fichier libre
- 'pour le fichier cible
- fTarget = FreeFile()
-
- 'si le fichier destination est defini alors on le prend, sinon
- 'on demande a windows de créer un fichier temporaire
- TempFile = NewFile
- If TempFile = vbNullString Then TempFile = IO.Path.GetTempFileName()
-
- 'On ouvre le fichier cible en mode ecriture et en acces partagé
- FileOpen(fTarget, TempFile, OpenMode.Output, OpenAccess.Write, OpenShare.Shared)
-
- 'Si l'utilisateur souhaite que l'on supprime certaines lignes en fonction de
- 'leur numéro
- If DelLinesNumbers Then
-
- 'on déclare le tableau qui contiendra l'analyse de Line
- 'pour savoir qu'elles sont les lignes à supprimer
- Dim Lines() As String
-
- 'on déclare le tableau qui contiendra les ligne en elles mêmes
- Dim LinesInt() As Integer
- Dim i As Integer ' variable pour les boucles For
- Dim CurrentLine ' variable pour savoir le nombre de lignes lues dans le fichier
- Dim CurrentLineIndex As Integer 'l'index dans LinesInt() de la ligne à supprimer
-
- 'la fonction slip separe les éléments de Line pour en extraire les lignes
- 'et les mettres dans un tableau
- Lines = Line.Split(";" )
-
- 'ensuite on met les lignes :
- 'on dimensionne le tableau d'entier
- ReDim LinesInt(Lines.GetUpperBound(0))
-
- 'On transforme le tableau de lignes sous forme de chaines
- 'en tabeau sous forme d'entiers
- For i = Lines.GetLowerBound(0) To Lines.GetUpperBound(0)
- LinesInt(i) = Int(Lines(i))
- Next i
-
- 'On tri le tableau par ordre croissant
- LinesInt.Sort(LinesInt)
-
- 'la premiere ligne du tableau
- CurrentLineIndex = LinesInt.GetLowerBound(0)
-
- 'si un utilisateur s'est trompé dans l'appel de la fonction
- 'est a envoyé "5;4;f;7;u" f et u sont devenus 0 lors de la conversion,
- 'et la 0 eme ligne du fichier
- 'n'existe pas, donc on les ignore
- 'de plus puisque le tableau est trié tous les 0 sont au début
- Do Until (LinesInt(CurrentLineIndex) > 0) Or (CurrentLineIndex = Lines.GetUpperBound(0))
- CurrentLineIndex = CurrentLineIndex + 1
- Loop
-
- 'Si aucune ligne > 0 n'a été trouvée, alors il n'ya aucune ligne a enlevé dans le fichier
- If (CurrentLineIndex = Lines.GetUpperBound(0)) And (LinesInt(CurrentLineIndex) = 0) Then GoTo err
-
- Do
- 'on laisse la main au systeme pour pas tout bloquer
- 'on lit une ligne
- LineToCopy = LineInput(fSource)
- 'on incrémente le nombre de lignes de lues
- CurrentLine = CurrentLine + 1
- '
- 'si la ligne lue est une ligne a supprimé on ne la copie pas
- 'et on passe a la ligne à supprimer suivante SI celle ci
- 'n'est pas la derniere
- If CurrentLine = LinesInt(CurrentLineIndex) Then
- If Not CurrentLineIndex = LinesInt.GetUpperBound(0) Then CurrentLineIndex = CurrentLineIndex + 1
- Else
- 'sinon on copie la ligne
- Print(fTarget, LineToCopy & vbCrLf)
- End If
-
- 'on continu jusqu'à ce qu'on arrive a la fin du fichier
- Loop While Not EOF(fSource)
-
- Else 'sinon on supprime les lignes semblables a Line
-
- 'SI lutilisateur l'a spécifié, on teste tout en majuscule
- If UCase Then Line = Line.ToUpper
-
- Do
- LineToCopy = LineInput(fSource)
- 'si l'utilisateur a spécifié que la même ligne lue
- 'doit etre sensiblement exacte
- If TestAllTheLine Then
- 'Dans le cas où l'utilisateut demande une comparaison sans
- 'respecter la casse
- If UCase Then
- 'si la ligne lue n'est pas semblable a Line
- 'on la copie
- If Not LineToCopy.ToUpper = Line Then rint(fTarget, LineToCopy & vbCrLf)
- 'Si on respecte la casse
- Else
- If Not LineToCopy = Line Then _
- Print(fTarget, LineToCopy & vbCrLf)
- End If
- Else
- If UCase Then
- 'si aucune occurence de Line n'est trouvée dans la ligne lue alors
- 'on copie la ligne
- If InStr(LineToCopy.ToUpper, Line) = 0 Then Print(fTarget, LineToCopy & vbCrLf)
- Else
- If InStr(LineToCopy, Line) = 0 Then Print(fTarget, LineToCopy & vbCrLf)
- End If
- End If
- Loop While Not EOF(fSource)
-
- End If
-
- 'on ferme l'acces aux fichiers
- FileClose(fSource, fTarget)
-
- 's'il l'utilisateur n'a pas spécifié de nom de fichier cible alors
- 'on supprime l'ancien fichier et on copie le fichier temporaire a sa place
- If NewFile = vbNullString Then
- 'on supprime l'ancien fichier
- Kill(FilePath)
- 'on copie le fichier temporaire a sa place
- FileCopy(TempFile, FilePath)
- End If
- 'sinon on conserve l'ancien fichier
-
- DelLineInFile = True 'la fonction a réussi
- Exit Function
- err:
-
- DelLineInFile = False 'la fonction a échouée
-
- End Function
|
Ce que je comprend pas c'est comment on lui dit de traiter le fichier en question et le ligne a virer ...
Enfin bref j suis un peu tout perdu et j'aurrai bien besoin d'aide.
Merci d'avance.
PS : j'espère que c'est pas trop décousu ! ---------------
Qui cherche trouve et qui donne reçoit ...
|