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

Scripts/Batch Discussion :

Recherche dans un fichier txt [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut Recherche dans un fichier txt
    Bonjour,

    j'étudie des logs, et je recherche deux types de message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    11.06.14 06:00:19.287 U10 <jstore> {InputManagerThread} COMMON    --- ******************* Transaction : 1/
    
    11.06.14 06:00:19.397 U10 <jstore> {InputManagerThread} COMMON    --- *******************Erreur Communication

    Ce que je voudrais c'est :

    - si la chaine "Transaction :" apparait dans le fichier.log
    - alors, pour la derniere ligne contenant "Transaction :"
    - si une ligne contenant "Erreur Communication" apparait après
    - et si entre ces deux lignes, il n'y a pas d'autre ligne contenant la série d'étoile *******************
    - alors echo Transaction


    En francais :

    Je recherche dans mon log la ligne la plus récente contenant la chaine "Transaction :". Si la prochaine ligne contenant "*****" contient aussi "Erreur Communication", alors je fais un echo.


    Je n'arrive pas à faire un "delims=*" dans un FOR. Le FIND ***** ne recopie pas la suite de la ligne


    J'espère que je j'ai été assez clair.
    Un merci à ceux qui ont pris de temps de lire, un deuxieme merci à ceux qui prendront le temps de m'aider !

  2. #2
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Bonjour,

    Donne nous ton code ça nous fera une base pour t'aider.

  3. #3
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut
    Salut Drizzt, merci pour ta réponse, voici le 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
    @echo off
    
    :: récupère dans le fichier transaction.txt, les lignes du terminal log indiqué dans le fichier nomTerminal.txt qui contiennent une tentative d'envoi de transaction 
    SET /p NomTerminal=<nomTerminal.txt
    FIND /n "Transaction : 1/" %NomTerminal% >Transaction.txt
    
    
    SET ErrorLvl=%ERRORLEVEL%
    
    
    :: si erreur de la recherche, alors transaction.txt = -1
    IF %ErrorLvl%==2 (
    	ECHO -1>Transaction.txt
    )
    
    
    :: si le fichier ne contient pas de transaction bloquée, alors  transaction.txt = 0
    IF %ErrorLvl%==1 (
    	ECHO ^0>Transaction.txt
    )
    
    
    
    :: si le fichier contient au moins une transaction, alors vérfie si elle est toujours bloquée et récupère le nombre de transaction
    SETLOCAL ENABLEDELAYEDEXPANSION
    IF %ErrorLvl%==0 (
    
    :: ici vérifier que la transaction est bien bloquée
    
    	FOR /F "tokens=2 delims=/" %%a IN (Transaction.txt) DO SET Transaction=%%a
    	ECHO !Transaction!>Transaction.txt
    )
    SETLOCAL DISABLEDELAYEDEXPANSION

    Mes logs sont assez complexes et le nombre de cas à prendre en compte m'a fait perdre la tête pour les autres parties de mon batch. Aussi la seule solution fiable que j'ai trouvé pour vérifier qu'il y a bien une transaction bloquée dans le fichier est celle que j'ai cité dans mon premier post :

    Dans le fichier, chercher la chaine "Transaction : 1/".
    Prendre l'occurence la plus récente de cette chaine (donc celle qui est écrite en dernier dans le log).
    Vérifier que la prochaine ligne contenant la série d'étoile ****** contient également le chaine "Error Communication".


    Je pense que le mieux serait de récupérer toute les lignes messages (celles qui contiennet la série d'étoile) dans un fichier texte et de le balayer avec un FOR.


    Merci

  4. #4
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Si j'ai bien compris voici ce que tu peux faire :

    1. Récupération des lignes avec *******. Pour cela findstr /N /C:"*****" nom_fic.log conviendra. Stocker le résultat dans un fichier

    2. Récupération des lignes avec Transaction dans ce résultat. Récupération de la dernière ligne et stockage du numéro de ligne et du numéro de transaction (boucle for avec delims=: sur un findstr /C:"Transaction" fic_etape_1)

    3.1 Récupération de la ligne suivant le numéro de ligne récupéré à l'étape précédente (findstr /B/C"num_ligne+1" sur le fichier de l'étape 1)
    3.2. Test si cette ligne contient "Erreur Comm" (findstr + errorlevel). Si oui le numéro de transaction a déjà été récupéré à l'étape 2. Sinon, le numéro de transaction est 0.

    Bon courage.
    A priori tu dois savoir tout faire vu le code que tu as fourni.

    C'est pas la solution la plus efficace et selon ta volumétrie ce n'est pas forcément adapté. Tu peux tout faire en un seul parcours du fichier de log en positionnant des flags. Mais je trouve la solution ci-dessus plus lisible.

    Mais bon si tu as une grosse volumétrie, le batch est pas non plus adapté

  5. #5
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut
    Salut, j'ai mis un peu de temps à répondre j'étais bien occupé ces derniers jours


    Le problème que j'ai avec ta solution, et je l'ai cité dans mon premier post, quand je fais un FIND "***" les lignes recopiés s'arrentent aux étoiles.

    FIND "***" sur "aaabbbccc*****erreur" renvoie "aaabbbccc*****" !


    demain je vais essayer avec un FOR et des delims et tokens

  6. #6
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Avec la ligne que je t'ai indiquée comme étape 1 tu récupèrera bien toute ta ligne.
    Et avec find aussi, le problème que tu indiques dans ton premier post viens plus probablement de ton FOR que du find.


    La solution que je te présente fonctionne. Il faut juste que tu fasses l'effort de la mettre en oeuvre. Si tu ne comprends pas une étape ou l'enchainement, n'hésite pas à demander.

    Si tu prefères rester sur ce que tu as commencé à faire, pas de souci mais ne dis pas que ce que l'on propose est faux sans l'avoir testé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recherche dans deux fichiers txt
    Par silvermanu dans le forum VBScript
    Réponses: 4
    Dernier message: 29/04/2010, 07h57
  2. Ajouter , rechercher dans un fichier txt
    Par Eausport dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/06/2009, 23h31
  3. Réponses: 5
    Dernier message: 01/03/2009, 22h32
  4. Recherche dans un fichier txt
    Par GOMMME dans le forum Langage
    Réponses: 16
    Dernier message: 24/04/2008, 17h15
  5. Recherche dans un fichier .txt et remplacer
    Par FracMaster dans le forum Langage
    Réponses: 12
    Dernier message: 09/05/2007, 09h10

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