IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

récupérer derniere ligne .txt


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut récupérer derniere ligne .txt
    Bonjour à tous

    Voilà j'ai un soucis auquel je n'ai pas trouvé de réponse
    - Malgrès des recherches sur ce forum et google

    Et j'aimerais votre aide
    (si le sujet à deja était traité merci de m'envoyer un lien je me débrouillerais pour la suite et reviendrais sur ce post si je n'y arrive toujours pas)

    Donc voici mon soucis

    J'execute un logiciel de sauvegarde à l'aide d'un VBS, le soucis c'est que le logiciel ne me signale une erreur quand il y en a une que dans un fichier log.txt

    Je voudrais donc après avoir executé mon appli


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save DINO")
    if save = vbyes then
    		'Set WshShell = WScript.CreateObject("WScript.Shell")
    		'Return = WshShell.Run("""C:\xxx.exe" , 1, true)
    		MsgBox "Fin de la sauvegarde" _

    qu'il me fasse une recherche dans mon fichier log.txt qui peut se présenter sous 2 formes

    en cas d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        22/12/2008 09:44:23 **** Sauvegarde de "Sauvegarde Dino" terminée! 0 fichiers ont été copiés. Durée : 0 heure(s), 0 minute(s), 0 secondes ****
    ERR 22/12/2008 09:44:24 La sauvegarde contient 1 erreurs

    ou si tout se passe bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        19/12/2008 14:14:04 L'archive "c:\save.zip" a été créée/mise à jour. 30 fichier(s) ont été compressé(s)

    et quand dans le cas ou la derniere ligne commence par "ERR" qu'il m'ouvre une msgbox en me disant "erreur"

    je sais faire les if et les msgbox

    le soucis c'est que je ne sais pas analyser les 3 premiers caractères de la derniere ligne d'un .txt

    Merci d'avance pour votre aide
    Demander moi des infos si il vous en manque

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour lire un fichier ligne à ligne :

    Comment lire le contenu d'un fichier texte ?

    et "left" pour lire le début d'une chaine:

    Comment extraire une partie d'une chaîne ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Merci beaucoup je regarde ça dessuite et je vous tiens au courant

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Par défaut
    Pour rechercher une chaine dans un fichier voici un bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    mot_cherche = "chaine"
    compteur = 0
    file = WScript.ScriptFullName ' on définit le fichier à lire, ici c'est le script lui même
     
    Set fso = CreateObject("Scripting.FileSystemObject") 
    set f = fso.opentextfile(file, 1, true)
     
    do until f.atendofstream 
    	chaine = f.readline() 
    	if instr(1, chaine, mot_cherche) > 0 then
    		compteur = compteur + 1
    	end if
    loop
     
    f.close 
    set f = nothing
    set fso = nothing 
     
    wscript.echo "Le mot : ""chaine"" a été trouvé " & compteur & " fois !!"

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Bon j'ai pas trop mal avancé (javance pas vite je suis au taf et j'ai plusieurs trucs à faire en même temps) mais je suis arrivé à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    if save = vbyes then
    		'Set WshShell = WScript.CreateObject("WScript.Shell")
    		'Return = WshShell.Run("""C:\xxx.exe" , 1, true)
    			'Vérification de la sauvegarde
    			Const ForReading = 1, ForWriting = 2 
    				Dim fFso, f
    				Dim gFso, g
    				Dim hFso, h
    				Dim ts, nl
    				Dim ligne
    				Dim avligne
    				Set oFso = CreateObject("Scripting.FileSystemObject")
    				Set f = oFso.OpenTextFile("d:\log.txt", ForReading)
    				ts = f.ReadAll '-- Lit la totalité du fichier
    				'Set ligne = f.Line    '-- Récupère le nombre de lignes (Mais cela ne fonctionne pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				' je désincrémente f.line de 1 (car le logiciel crée une ligne vide à la fin) (Je ne sais pas comment faire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    				' je crée un .txt temporaire
    				Set gFso = CreateObject("Scripting.FileSystemObject")
    				Set g = gFso.OpenTextFile("d:\temp.txt", ForWriting,true)
    				' je récupère f.line-1 dans un .txt temporaire
    				'g.write(f.line-1) (Mais cela ne fonctionne pas ... quoique plutot logique pour l'instant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    				' je cherche la présence de "ERR" de dedans
    				mot_cherche = "ERR"
    				compteur = 0
    				file = d:\temp.txt ' on définit le fichier à lire, ici c'est mon .txt temporaire
    				Set hFso = CreateObject("Scripting.FileSystemObject") 
    				set h = fFso.opentextfile(file, 1, true) 
    				do until h.atendofstream 
    					ERR = h.readline() 
    					if instr(1, ERR, mot_cherche) > 0 then
    						compteur = compteur + 1
    					end if
    				loop
    				h.close 
    				set h = nothing
    				set hFso = nothing  
    				wscript.echo "Le mot : ""ERR"" a été trouvé "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    				'si ERR à était trouvé msgbox "ERROR" sinon suite
    				'If exist ERR
    				'	Msgbox "Erreur"
    				'Else
    		MsgBox "Fin de la sauvegarde" _
    		,vbinformation,"Save"
    	else
    end if

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Par défaut
    Tu n'es pas obligé de créer un fichier temporaire, tu peux directement aller lire dans ton fichier de log généré par ton outils de sauvegarde.

    Ici tu n'as pâs non plus besoin de lire ton fichier avec "f.ReadAll " on le fait lors du "do until f.atendofstream" soit tant que l'on a pas atteind la fin du fichier on fait le traitement de recherche de chaine.

    Sinon pour compter le nombre de ligne d'un fichier voici un autre exmple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ' ****	COMPTE LE NOMBRE DE LIGNE	****
    Const ForReading = 1, ForWriting = 2 
    Dim File, oFso, f
    Dim ts, nl
     
    ' Définition du fichier pour lequel on veut compter le nombre de ligne 
    File = WScript.ScriptFullName 
     
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Set f = oFso.OpenTextFile(File, ForReading)
    f.ReadAll			'-- Lit la totalité du fichier
    Nbligne = f.Line	'-- Récupère le nombre de lignes
    Wscript.echo "le fichier : " & File & vbcrlf & "contient " & Nbligne & " ligne(s)"
    Sinon as tu testé si ça fonctionne ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Bon j'en suis là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    if save = vbyes then
    		'Set WshShell = WScript.CreateObject("WScript.Shell")
    		'Return = WshShell.Run("""C:\xxx.exe" , 1, true)
    			'Vérification de la sauvegarde
    			' ****	COMPTE LE NOMBRE DE LIGNE	****
    			Const ForReading = 1, ForWriting = 2 
    			Dim File, oFso, f
    			Dim ts, nl
    			' Définition du fichier pour lequel on veut compter le nombre de ligne 
    			File = "d:\log.txt" 
    			Set oFso = CreateObject("Scripting.FileSystemObject")
    			Set f = oFso.OpenTextFile(File, ForReading)
    			f.ReadAll			'-- Lit la totalité du fichier
    			Nbligne = f.Line	'-- Récupère le nombre de lignes
    			Wscript.echo "le fichier : " & File & vbcrlf & "contient " & Nbligne & " ligne(s)"
    			' Chercher le mot ERR dans le fichier (pour l'instant)
    			compteur = 0
    			Set fso = CreateObject("Scripting.FileSystemObject") 
    			set f = fso.opentextfile(file, 1, true)
    			do until f.atendofstream 
    				chaine = f.readline() 
    				if instr(1, chaine, "ERR") > 0 then
    					compteur = compteur + 1
    				end if
    			loop 
    			f.close 
    			set f = nothing
    			set fso = nothing 
    			wscript.echo "Le mot : ""ERR"" a été trouvé " & compteur & " fois !!"
    					MsgBox "Fin de la sauvegarde" _
    					,vbinformation,"Save"
    	else
    end if
    là j'ai plusieurs soucis

    - Il me trouve bien le mot "ERR" dans un .vbs mais pas dans mon log.txt
    - Il doit uniquement chercher le mot "ERR" dans l'avant dernière ligne
    - Il dot uniquement incrémenter le compteur si il trouve "ERR" dans l'avant derniere ligne pour partir apres sur un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If compteur>0 
       Msgbox "erreur"
    Else
       Suite
    Donc il faudrait que je fasse
    Nbligne-1 = Nbligne auquel je désincrémente 1
    Puis recherche "ERR"
    File = "d:\log.txt" à la ligne Nbligne-1
    Et pour finalement dire que si il a trouve "ERR" donc si compteur n'es pas égal à 0 alors
    Msgbox "Erreur dans la sauvegarde contacter le service technique"

    Sinon pour trouver le nombre de ligne c'est OK

    Réedit: en fait il me trouve mes "ERR" quand dans le script qui se lance dans un autre vbs cela ne fonctionne pas non plus

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    A la rigueur ce que je pourrais faire c'est de vider mon fichier log à chaque fin de sauvegarde comme ça on obtiendrait la procédure suivante


    Log vide
    Début Procédure
    Début de sauvegarde
    Fin de sauvegarde
    Log contenant le résultat de la sauvegarde précedente
    Chercher ERR dans mon log
    Si ERR alors message d'erreur
    Sinon Fin de la procédure
    Test si log2.txt existe
    Si log2.txt existe
    Copier coller le contenu de mon log.txt dans log2.txt (pour conserver une sauvegarde)
    Sinon créer log2.txt puis copier coller le contenu de mon log.txt dans log2.txt (pour conserver une sauvegarde)
    Vider mon fichier log.txt

    Je pense que celà simplifira la procédure

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Par défaut
    Oui, cela me parait être un bon cheminement, si j'ai bien compris ce que tu veux faire.

    Sinon pour ton log, géralement mois j'effectue une copie de mon fichier de log pricipale (celui qui est réécrasé à chaque exécution, pour toi la log de sauvegarde), et je nomme le fichier copier avec le même nom et je rajoute la date et l'heure à la suite de nom pour archiver mes logs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    FileSrc = "toto.log"		' Fichier source à copier
    FileDest = "toto"			' Fichier destination
    ExtDest = ".log"			' Extention du fichier destination
     
    ' ON COPIE LE FICHIER DE SORTIE AVEC LA DATE ET L'HEURE DU JOUR
    ' ==================================================================
    ' on formate la date pour le nom de fichier
    DateJ = DatePart("d",Date) & DatePart("m",Date) & DatePart("yyyy",Date)
    DateH = DatePart("h",now())&"h" & DatePart("n",now()) 
     
    ' on copie le fichier source vers le fichier de destination avec la date et l'heure.
    Set fso = CreateObject("Scripting.FileSystemObject" )
    If fso.FileExists(FileSrc) Then	
    	fso.CopyFile FileSrc , FileDest & "_"&DateJ & "_" &DateH & ExtDest
    Else
    	msgbox "Copie du fichier de sortie avec la date et heure du jour Impossible", vbCritical, "Copie impossible"
    End if
    Quand tu as terminé fait nous signe

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Donc il faudrait que je fasse
    Nbligne-1 = Nbligne auquel je désincrémente 1
    Puis recherche "ERR"
    File = "d:\log.txt" à la ligne Nbligne-1
    Et pour finalement dire que si il a trouve "ERR" donc si compteur n'es pas égal à 0 alors
    Msgbox "Erreur dans la sauvegarde contacter le service technique"

    Sinon pour trouver le nombre de ligne c'est OK

    Réedit: en fait il me trouve mes "ERR" quand dans le script qui se lance dans un autre vbs cela ne fonctionne pas non plus
    J'ai pas tout compris, avec des phrases en français ?

    Sinon c'est cela que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    'const ForReading = 1, ForWriting = 2  -> inutile de les définir si tu ne les utilises pas !!!
    dim save, File, fso, f, Nbligne, ancienne_chaine, chaine_courante
     
     
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    If save = vbyes Then
     
    			set fso = CreateObject("Scripting.FileSystemObject")
     
    			ancienne_chaine = ""
    			chaine_courante = ""
     
    			' Définition du fichier pour lequel on veut compter le nombre de ligne 
    			File = "d:\log.txt" 
     
    			compteur = 0
    			set f = fso.opentextfile(File, 1, true)
    			Nbligne = f.Line	'-- Récupère le nombre de lignes
    			Wscript.echo "le fichier : " & File & vbcrlf & "contient " & Nbligne & " ligne(s)"
     
    			' Récupère les deux dernières lignes du fichier.
    			Do Until f.atendofstream 
    				ancienne_chaine = chaine_courante
    				chaine_courante = f.readline() 
    			Loop 
     
    			If instr(1, ancienne_chaine, "ERR") > 0 Then
    					compteur = 1
    			End If
     
    			f.close 
    			set f = nothing
    			set fso = nothing 
     
    			If(compteur > 0) Then
    				wscript.echo "Il y a une erreur dnas le fichier de log !!!"
    			End If
    			MsgBox "Fin de la sauvegarde", vbinformation, "Save"
    End If

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Me relisant ce matin je me suis rendu compte que mes phrases et mon script de hier avant que je débauche contenait des fautes

    Suite à ça j'ai rebosser mon script avec tout vos conseils et j'en arrive là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    if save = vbyes then
    		'Set WshShell = WScript.CreateObject("WScript.Shell")
    		'Return = WshShell.Run("""C:\xxx.exe" , 1, true)
    			' *** VERIFICATION DE LA SAUVEGARDE***
    			dim f,fso,fld
    				' ==============================
    				'  CHERCHER "ERR" DANS "log.txt"
    				' ==============================
    					File = "d:\log.txt"
    					compteur = 0
    					Set fso = CreateObject("Scripting.FileSystemObject") 
    					set f = fso.opentextfile(file, 1, true)
    					do until f.atendofstream 
    						chaine = f.readline() 
    					loop
    					if instr(1, chaine, "ERR") > 0 then
    						compteur = 1
    					end if					 
    					f.close 
    					set f = nothing
    					set fso = nothing 
    					If(compteur > 0) Then
    						wscript.echo "Il y a une erreur dans le fichier de log !!!"
    					End If
    				' ======================
    				' SAUVEGARDER "log.txt"
    				' ======================
    					' Tester si "d:\savelog" existe sinon le créer
    					Set fso = CreateObject("Scripting.FileSystemObject")
    					if fso.FolderExists("D:\savelog") = 0 Then
    						Set fld=fso.CreateFolder ("D:\savelog")
    					Else
    					end if
    					'Sauvegarder Mon Fichier log.txt dans d:\savelog\ avec la date et l'heure du jour			
    					FileSrc = "d:\log.txt"		' Fichier source à copier
    					FileDest = "d:\savelog\log"			' Fichier destination
    					ExtDest = ".txt"			' Extention du fichier destination			
    					' on formate la date pour le nom de fichier
    					DateJ = DatePart("d",Date) & DatePart("m",Date) & DatePart("yyyy",Date)
    					DateH = DatePart("h",now())&"h" & DatePart("n",now())  
    					' on copie le fichier source vers le fichier de destination avec la date et l'heure.
    					If fso.FileExists(FileSrc) Then	
    						fso.CopyFile FileSrc , FileDest & "_"&DateJ & "_" &DateH & ExtDest
    					Else
    					End if
    				' ===================
    				' SUPPRIMER "log.txt"
    				' ===================
    					fso.DeleteFile "d:\log.txt",True
    				' ==============
    				' FIN DU SCRIPT
    				' ==============					
    					MsgBox "Fin de la sauvegarde" _
    					,vbinformation,"Save"
    	else
    end if
    Et je bloque toujours au test de "ERR" car il ne me trouve rien alors que je test avec des logs qui contiennent des "ERR" sinon une fois ça passé tout sera résolu (du moins j'espère)

    Merci à gpanpan, ced600 et bbil pour votre aide

  12. #12
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Essaye d'enlever le premier paramètre dans ta fonction Instr, elle recherche par défaut à partir du premier caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr(chaine, "ERR") > 0 then
    ou autre méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(chaine, 3) = "ERR" Then
    Peut-être que le err de ton fichier de log n'est pas toujours formaté comme cela (surement que si mais bon), et de toutes façons ça ne mange pas de pain de mettre un petit UCase() autour de ta chaine lors des comparaisons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr( UCase(chaine), "ERR") > 0 then
    ou autre méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left( UCase(chaine), 3) = "ERR" Then
    Essaye de voir si ça marche pas comme ça.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    bon j'ai créé pour la partie "ERR" un toto.vbs avec ceci dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    '' *** VERIFICATION DE LA SAUVEGARDE***
    	dim f,fso,fld
    		' ==============================
    		'  CHERCHER "ERR" DANS "log.txt"
    		' ==============================
    			File = "d:\log.txt"
    			compteur = 0
    			Set fso = CreateObject("Scripting.FileSystemObject") 
    			set f = fso.opentextfile(file, 1, true)
    			do until f.atendofstream 
    				chaine = f.readline() 
    			loop
    			if instr( UCase(chaine), "ERR") > 0 then
    				compteur = 1
    			end if					 
    			f.close 
    			set f = nothing
    			set fso = nothing 
    			If(compteur > 0) Then
    				wscript.echo "Il y a une erreur dans le fichier de log !!!"
    			Else
    				wscript.echo "Il y a pas d'erreur"
    			End If
    et un fichier log.txt sous la forme

    donc quand j'execute mon toto.vbs je devrais avoir
    "Il y a une erreur dans le fichier de log !!!"
    Et ce n'est pas le cas il m'afficher toujours
    "Il y a pas d'erreur"

    J'ai essayé avec les 4 propositions de pitchalov (que je remercie au passage) mais celà ne change rien à mon problème

  14. #14
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 304
    Par défaut
    salut,
    ton code ne peux pas marcher puisque tu testes la dernière ligne et non l'avant-dernière ligne

    ced600 t'as déjà donné la bonne solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    If save = VbYes Then
    	sFile = "log.txt"
    	Set fso = CreateObject("Scripting.FileSystemObject") 
    	Set f = fso.OpenTextFile(sFile, 1, true)
    	curLine=""
    	Do
    		bufLine=curLine
    		curLine = f.ReadLine() 
    	Loop Until f.AtEndOfStream 					
    	If instr(1, bufLine, "ERR") > 0 Then
    		wscript.echo "Il y a une erreur dans le fichier de log !!!"
    	End If					 
      f.Close
    End If
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Précision: avec mon nouveau script je coupe/colle le log.txt dans un autre dossier à la fin de la procédure donc le logiciel en créera un qui n'appartiendra qu'à ma sauvegarde en cours donc on peut scanner les 3 caractères de toutes les lignes sans avoir peur de tomber sur un log antérieur

    Malgrès tout, même avec vos procédure il devrait me trouver quelque chose et là il me trouve toujours rien j'ai pourtant copier/coller ton code omen999 dans un nouveau .vbs et ça ne fais rien

    J'ai peut etre une mauvaise démarche à un moment mais là avec mes connaissances je butes ...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    je vois dans ce sujet

    http://www.developpez.net/forums/d60...fichier-texte/

    que l'on recherche toutes les occurences à f45 et que l'on modifie on pourrait pas faire un peu de même avec mon truc ?

    rechercher toutes les occurences à ERR sauf que quand il en trouve une il me m'affiche une msgbox ? en tout cas je me penche sur ce script pour voir ce dont je suis capable

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    je viens de me rendre compte de quelque chose avec le script que vous m'avez envoyé

    Il recherche ERR dans le titre du fichier

    exemple:
    J'ai un fichier ERR.txt vide il me trouve une erreur
    J'ai un fichier log.txt avec ERR dedans il me trouve aucune erreur

  18. #18
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    rechercher toutes les occurences à ERR sauf que quand il en trouve une il me m'affiche une msgbox ? en tout cas je me penche sur ce script pour voir ce dont je suis capable
    C'est possible mais ce n'est pas ce que tu voulais faire.
    C'est différent de regarder l'avant dernière ligne que de détecter la première occurence de ERR.

    Qu'est ce que tu as besoin de faire ?

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Je vais tout poser à plat pour repartir sur de bonne base

    Voilà mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    save = msgbox("Voulez-vous lancer la sauvegarde ?",vbYesNo,"Save")
    if save = vbyes then
    		'Set WshShell = WScript.CreateObject("WScript.Shell")
    		'Return = WshShell.Run("""C:\xxx.exe" , 1, true)
    			' *** VERIFICATION DE LA SAUVEGARDE***
    			dim f,fso,fld
    				' ==============================
    				'  CHERCHER "ERR" DANS "log.txt"
    				' ==============================
    					File = "d:\log.txt"
    					compteur = 0
    					Set fso = CreateObject("Scripting.FileSystemObject") 
    					set f = fso.opentextfile(file, 1, true)
    					do until f.atendofstream 
    						chaine = f.readline() 
    					loop
    					If Left(chaine, 3) = "ERR" Then
    						compteur = 1
    					end if					 
    					f.close 
    					set f = nothing
    					set fso = nothing 
    					If(compteur > 0) Then
    						wscript.echo "Il y a une erreur dans le fichier de log !!!"
    					End If
    				' ======================
    				' SAUVEGARDER "log.txt"
    				' ======================
    					' Tester si "d:\savelog" existe sinon le créer
    					Set fso = CreateObject("Scripting.FileSystemObject")
    					if fso.FolderExists("D:\savelog") = 0 Then
    						Set fld=fso.CreateFolder ("D:\savelog")
    					Else
    					end if
    					'Sauvegarder Mon Fichier log.txt dans d:\savelog\ avec la date et l'heure du jour			
    					FileSrc = "d:\log.txt"		' Fichier source à copier
    					FileDest = "d:\savelog\log"			' Fichier destination
    					ExtDest = ".txt"			' Extention du fichier destination			
    					' on formate la date pour le nom de fichier
    					DateJ = DatePart("d",Date) & DatePart("m",Date) & DatePart("yyyy",Date)
    					DateH = DatePart("h",now())&"h" & DatePart("n",now())  
    					' on copie le fichier source vers le fichier de destination avec la date et l'heure.
    					If fso.FileExists(FileSrc) Then	
    						fso.CopyFile FileSrc , FileDest & "_"&DateJ & "_" &DateH & ExtDest
    					Else
    					End if
    				' ===================
    				' SUPPRIMER "log.txt"
    				' ===================
    					fso.DeleteFile "d:\log.txt",True
    				' ==============
    				' FIN DU SCRIPT
    				' ==============					
    					MsgBox "Fin de la sauvegarde" _
    					,vbinformation,"Save"
    	else
    end if
    Cela me permet de faire des sauvegardes de log et permet en même temps d'avoir un nouveau fichier log à chaque nouvelle sauvegarde

    Donc à partir de là il faudrait que je puisse analyser mon log.txt pour voir si il trouve ERR dedans en sachant que

    les logs d'erreur sont sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        22/12/2008 16:11:24 Bienvenue dans Cobian Backup Amanita
        22/12/2008 16:11:24 Version du moteur : 9.5.0.103  Version d'OS : 5.1.2600  Service : Non
        22/12/2008 16:11:24 Sauvegarde de la liste courante (ligne de commande)
        22/12/2008 16:11:24 Le programme sera fermé à la fin de la tâche (ligne de commande)
        22/12/2008 16:11:25 **** Sauvegarde de "Sauvegarde" démarrée ****
    ERR 22/12/2008 16:11:28 Impossible de créer le répertoire de destination "H:\Save"
        22/12/2008 16:11:28 **** Sauvegarde de "Sauvegarde" terminée! 0 fichiers ont été copiés. Durée : 0 heure(s), 0 minute(s), 0 secondes ****
    ERR 22/12/2008 16:11:28 La sauvegarde contient 1 erreurs
    les logs bons sont sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        19/12/2008 13:05:25 Bienvenue dans Cobian Backup Amanita
        19/12/2008 13:05:25 Version du moteur : 9.5.0.103  Version d'OS : 5.1.2600  Service : Non
        19/12/2008 13:05:25 Sauvegarde de la liste courante (ligne de commande)
        19/12/2008 13:05:25 Le programme sera fermé à la fin de la tâche (ligne de commande)
        19/12/2008 13:05:26 **** Sauvegarde de "Sauvegarde Dino" démarrée ****
        19/12/2008 13:05:29 Création ou mise à jour de l'archive "H:\SaveDino\dinoexe 2008-12-19 13;05;29.zip"
        19/12/2008 13:05:57 L'archive "H:\SaveDino\dinoexe 2008-12-19 13;05;29.zip" a été créée/mise à jour. 30 fichier(s) ont été compressé(s)
        19/12/2008 13:06:01 0 fichiers vérifiés dans "H:\SaveDino\dinoexe 2008-12-19 13;05;29.zip"
        19/12/2008 13:06:01 **** Sauvegarde de "Sauvegarde Dino" terminée! 30 fichiers ont été copiés. Durée : 0 heure(s), 0 minute(s), 31 secondes ****
    Nous ne sommes donc plus obligé de rechercher uniquement dans l'avant-dernière ligne mais juste dans les 3 premiers caractères de tout le document (si cela est plus simple)

    Je regarde donc en ce moment le post

    http://www.developpez.net/forums/d65...es-caracteres/

    En essayant de comprendre et d'adapter ce qu'il me faut mais tout conseil serait le bienvenu car en tant que débutant j'ai énormement de mal

  20. #20
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Nous ne sommes donc plus obligé de rechercher uniquement dans l'avant-dernière ligne mais juste dans les 3 premiers caractères de tout le document (si cela est plus simple)
    Ce n'est pas une question d'être plus simple, c juste une question de ce que tu veux faire : Référencer toutes les lignes avec ERR, les collecter, et les affichers (ou stockés dans un autre logs) ou à la première ERR trouvée demander à l'utilisateur de lire le fichier log.

    Dans le premier cas, il suffit d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    do until f.atendofstream 
       chaine = f.readline() 
       if instr(LTrim(chaine), "ERR") > 0 then
          compteur = compteur + 1
       end if
    loop
    Rajoute un else et des affichage (msgbox ou wscript.echo) pour savoir où tu passe dans ton if (pour le debug).

    Dans le deuxième cas c'est la même chose, mais dans le if après la ligne compteur = compteur + 1 tu rajoutes exit si je ne me trompe pas -> L'équivalent du break en c.

    Puis tu testes si compteur est supérieur à 0. Si ce n'est pas le cas alors que tu as des ERR c'est que tu n'incrémentes jamais le compteur donc que tu ne rentres jamais la condition (d'où mettre un else avec msgbox pour savoir).
    Le LTrim, et ne pas mettre le premier argument (facultatif) résoudront peut être tes problèmes.

    Inutile de travailler sur le script d'un autre sujet.
    Ce qu'il te faut c'est le script que tu as commencé mais débugué.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Récupérer derniere ligne d'une textbox multiligne
    Par pauleta75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/06/2011, 15h23
  2. récupérer la derniere ligne d'une table?
    Par purplebamboo dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 09/04/2009, 16h41
  3. Réponses: 11
    Dernier message: 22/07/2008, 09h11
  4. récupérer les dernieres lignes d'une table
    Par steave dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2008, 12h26
  5. Récupérer les N derniers lignes
    Par arsenik7 dans le forum Oracle
    Réponses: 8
    Dernier message: 12/05/2006, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo