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 dynamique sur les lignes d'un fichier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Par défaut Recherche dynamique sur les lignes d'un fichier
    Bonjour à tous,

    Petit nouveau sur le forum Batch, il faut un début à tout
    Je vous sollicite car je suis confronté à un problème avec la commande findstr, je vais vous expliquer.

    Avant tout, ce que je cherche à faire, c'est à partir d'une ligne stockée dans une variable, je recherche la présence du mot VALID ou FAILED ou NO_MODEL.
    Si un de ces mots est présent, actuellement je fais juste un echo de la ligne. Par la suite, je voudrais récupérer le premier champs de la ligne, et faire d'autres opérations pour lesquels je reviendrai vers vous si je ne m'en sort pas. Mais chaque chose en son temps, en restant sur mon simple echo, j'ai déjà un problème. Ma boucle itère une seule fois. Voici mon code, j'explique ensuite :

    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
    FOR /f "delims=" %%a in ('type %Mon_repertoire%\CAMPAGNE_DE_TEST\RAPPORT.txt') do (
    	REM echo %%a>> %Mon_repertoire%\CAMPAGNE_DE_TEST\TMP_RAPPORT.txt
    	findstr "VALID" %%a && GOTO Found
    	findstr "FAILED" %%a && GOTO Found
    	findstr "NO_MODEL" %%a && GOTO Found
    	GOTO End
    	
    	:Found
    	FOR /f "tokens=1 delims=:" %%b in ("%%a") do (
    		echo %%b
    	)
    	
    	:End
    	echo.
    )
    Et voici un petit exemple du Fichier à traiter :

    ################################################################
    ################################################################
    ### Rapport de la campagne de tests sur PUBPARC
    ###
    ### La campagne de tests a ete lancee par kguegan
    ###
    ### 29/08/2014 12h05m40s G06R01C04
    ################################################################
    ################################################################




    #####################################
    ### Resultats des tests PubParc : ###
    #####################################


    CMD_ACQ_Fibre_0001001023_0384674312_D38 : VALID

    Pas de description pour ce test

    --------------------

    CMD_TRF_Fibre_0001001023_0384674312_D38 : VALID

    Pas de description pour ce test

    --------------------

    CMD_ACQ_Fibre_0001001023_0384674312_D38 : VALID

    Pas de description pour ce test

    --------------------

    CMD_TRF_Fibre_0001001023_0384674312_D38 : VALID

    Pas de description pour ce test

    --------------------

    QS_NR_CAS12 : FAILED

    Pas de description pour ce test
    Donc mon premier FOR me renvoi la première ligne, que le findstr ne peut traiter. Il affiche le message trois fois, puis fin du programme.
    Il itère donc une seule fois...

    Any idea ?

    Pour info, quand je mets en commentaires le findstr, il itère correctement.

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Tu ne peux pas faire un findstr sur une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        findstr "VALID" %%a && GOTO Found
    dans ton cas %%a ce refère à une ligne du fichier rapport.txt. Hors FINDSTR attend un nom de fichier.
    Tu pourrais faire un PIPE findstr sur un echo de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo %%a | findstr "VALID" && GOTO Found
    Mais ça serait beaucoup trop long.


    Dans ton cas tu peux simplifier la récuperation de ton 1er champ de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off&cls
    ::Le fichier à tester
    Set "$Fichier=rapport.txt"
    
    ::Les valeurs à tester
    Set "$Cherche=VALID FAILED NO-MODEL"
    
    ::La recherche
    for %%x in (%$Cherche%) do (
      for /f "tokens=1 delims= " %%a in ('findstr "%%x" %$Fichier%') do (echo Trouv‚ [%%x] - Valeur : [%%a]
    ))

    Sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Trouvé [VALID] - Valeur : [CMD_ACQ_Fibre_0001001023_0384674312_D38]
    Trouvé [VALID] - Valeur : [CMD_TRF_Fibre_0001001023_0384674312_D38]
    Trouvé [VALID] - Valeur : [CMD_ACQ_Fibre_0001001023_0384674312_D38]
    Trouvé [VALID] - Valeur : [CMD_TRF_Fibre_0001001023_0384674312_D38]
    Trouvé [FAILED] - Valeur : [QS_NR_CAS12 ]

  3. #3
    Membre confirmé Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Par défaut
    Trop fort

    Je m'attaque à la suite, je reviens si j'ai encore un soucis !!

  4. #4
    Membre confirmé Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Par défaut
    Ah ouai mais là ça pose problème...

    Si tu remarque dans mon code, même si c'est en commentaires, je retranscrit ce que je lis dans un fichier temporaire.
    En fait, ce que je souhaite faire, c'est ajouter sous le nom des tests qui précèdent les mentions VALID FAILED ou NO-MODEL si mon test est VALID ou non dans un autre environnement.

    Donc soit il m'est possible aisément d'insérer sous la ligne concernée, soit il faut repartir sur une lecture ligne par ligne pour que je puisse insérer dans un fichier temporaire...

    EDIT : peut être partir sur le echo pipe dans ce cas ? Le temps n'est pas un soucis, le process est déjà très long en dehors de ça...

    EDIT 2 : le echo n'est pas très concluant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	echo %%a | findstr "VALID" && echo titi
    	echo %%a | findstr "FAILED" && echo tata
    	echo %%a | findstr "NO_MODEL" && echo toto
    Résultat : rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	echo %%a | findstr "VALID" && echo titi
    	echo %%a | findstr "FAILED" || echo tata
    	echo %%a | findstr "NO_MODEL" && echo toto
    Résultat :
    tata
    %%a


    Le findstr m'emm*rde

  5. #5
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Donne un exemple de ce que tu veux en sortie pour que ça soit un peu plus clair.


  6. #6
    Membre confirmé Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Par défaut
    Je suis en retard, je t'envoie ça Lundi, en attendant j'ai fait un affichage à la suite du fichier.

    Merci à toi

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

Discussions similaires

  1. Itérer sur les lignes d'un fichier
    Par rolintoucour dans le forum Général Java
    Réponses: 1
    Dernier message: 10/01/2013, 21h49
  2. Appliquer une fonction sur les lignes d'un fichier
    Par sconrad dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2012, 15h26
  3. [Débutant] Fonction pour faire un Substring sur les lignes d'un fichier
    Par Lhtldrn dans le forum C#
    Réponses: 2
    Dernier message: 23/06/2012, 13h17
  4. Réponses: 2
    Dernier message: 19/09/2006, 21h34
  5. statistiques sur les lignes et colonnes d'un fichier
    Par ericbareke dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2006, 16h09

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