Récupérer une ligne sans chercher de chaines spécifiques ?

Résolu
liocifer Messages postés 33 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 5 mars 2010 - 23 juin 2008 à 16:47
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 7 juil. 2008 à 17:38
Bonjour,


J' aimerais savoir comment récupérer par exemple la ligne 18 du fichier log suivant sans chercher de chaines spécifiques :


1 Informations concernant les fichiers modifiés


4 Autocad.au3 Liocifer E99324C67E99403 25/03/2008

5 Filezilla3.au3 Liocifer E99324C67E99403 25/03/2008

6 Access.au3 Liocifer E99324C67E99403 25/03/2008

7 Belem.au3 Liocifer E99324C67E99403 25/03/2008

8 Project.au3 Liocifer E99324C67E99403 25/03/2008

9 Visio.au3 Liocifer E99324C67E99403 25/03/2008


11 ----------- ----------- ----------- ----------- -----------


13 Autocad.au3 Liocifer E99324C67E99403 23/06/2008

14 Filezilla3.au3 Liocifer E99324C67E99403 23/06/2008

15 Access.au3 Liocifer E99324C67E99403 23/06/2008

16 Belem.au3 Liocifer E99324C67E99403 23/06/2008

17 Project.au3 Liocifer E99324C67E99403 23/06/2008
18 Visio.au3 Liocifer E99324C67E99403 23/06/2008


20----------- ----------- ----------- ----------- -----------


En fait à chaque ouverture de ce fichier log je tiens à récupérer l' avant avant derniere ligne, je tiens à utiliser
toujours cette méthode pour pouvoir comparer la date de cette dernière
ligne avec celle de la date du jour pour que mon script s' execute.


J' espère avoir été assez explicite.


Merci d' avance pour toutes vos réponses.


Cordialement.

5 réponses

Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juin 2008
23 juin 2008 à 16:56
euh, si t'essaye avec un Split ? et que tu récupére ensuite la 18 éme valeur de ton tableau ... non ?

Tous sur MAC OS X Leopard
3
MisterWhiteLapin Messages postés 19 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 28 juillet 2008
23 juin 2008 à 17:51
Bonjour,

Voici une solution: tu lis ligne par ligne ton fichier et tu comptes. Voici un exemple de script qui lit et affiche la ligne 18 dans une messageBox:

------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ObjFile = objFSO.OpenTextFile("c:\test.txt", 1)

intCpt = 0

strTmp = ObjFile.ReadLine

Do While (Not (ObjFile.AtEndOfStream))
    intCpt = intCpt + 1
    If (intCpt = 18) Then
        msgbox "la ligne 18 est """ & strTmp & """"
    End If
    strTmp = ObjFile.ReadLine
Loop

Set objFSO = Nothing
Set ObjFile =  Nothing
------------------------------------------

Après ça reste modifiable et améliorable. Tu peux déjà faire une première passe pour compter le nombre de lignes puis repasser par exemple...
N'hésites pas si tu as une question sur mon morceau de script.

En espérant que ça t'aide.

Cordialement,

--
Mister White Lapin
3
MisterWhiteLapin Messages postés 19 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 28 juillet 2008
23 juin 2008 à 18:18
Re-Bonjour,

En fait, en utilisant la méthode de Totooo62, c'est bien mieux.

Voici le script qui fait exactement ce que tu veux (l'avant avant dernier).

-------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ObjFile = objFSO.OpenTextFile("c:\Users\mvarin\Desktop\test.txt", 1)

intCpt = 0
arrTmp = Split(ObjFile.ReadAll, vbCrlf)
msgbox "av dernier elt is """ & arrTmp(UBound(arrTmp) - 3) & """"
Set objFSO = Nothing
Set ObjFile =  Nothing
-------------------

C'est la valeur arrTmp(UBound(arrTmp) - 3) qui t'intéresse.

Cordialement,

--
Mister White Lapin
3
liocifer Messages postés 33 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 5 mars 2010
23 juin 2008 à 20:19
Re,

Merci à vous deux.En fait j' ai combiné tes deux réponses ce qui donne ceci :

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ObjFile = objFSO.OpenTextFile("c:\temp\test.txt", 1)

intCpt = 0

arrTmp = Split(ObjFile.ReadAll, vbCrlf)
NbElement = UBound(arrTmp) - 3
'MsgBox NbElement
'WScript.quit
ObjFile.Close

Set ObjFile = objFSO.OpenTextFile("c:\temp\test.txt", 1)
strTmp = ObjFile.ReadLine

Do While (Not ( ObjFile.AtEndOfStream ))
    intCpt = intCpt + 1
    If (intCpt = NbElement) Then
        MsgBox "La derniere ligne est """ & strTmp & """"
    End If
    strTmp = ObjFile.ReadLine
Loop

Set objFSO = Nothing
Set ObjFile = Nothing

Merci encore.

@+++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
7 juil. 2008 à 17:38
 Bonjour,

Il y a l'argument count dans la fonction split :

MsgBox FnSearchLine("D:\Servers.txt",18)

Function FnSearchLine(ArgFile, ArgNbrLine)  Const ForReading 1, ForWriting 2, ForAppending = 8
  Dim objFso, objTextStream
  Dim strtmp

  Set objFso = Createobject("Scripting.FileSystemobject")
  Set objTextStream = objFso.OpenTextFile(ArgFile, ForReading)
 
  Do While Not objTextStream.AtEndOfStream
     strtmp = split(objTextStream.ReadAll, vbLf, ArgNbrLine+1)
  Loop
  objTextStream.Close

  If UBound(strtmp) = argNbrLine Then
     FnSearchLine = "Ligne "  & ArgNbrLine & vbCrLf& _
                    strtmp(UBound(strtmp)-1)
  Else
     FnSearchLine = "Ligne " & ArgNbrLine & " non trouvée" & vbCrLf & _
                     strtmp(UBound(strtmp))
  End If
 
  Set objTextStream = Nothing
  Set objFso = Nothing
End Function

jean-marc
0
Rejoignez-nous