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

  1. #1
    Membre régulier 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
    Points : 111
    Points
    111
    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
    Points : 3 768
    Points
    3 768
    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 ]
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Trop fort

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

  4. #4
    Membre régulier 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
    Points : 111
    Points
    111
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Donne un exemple de ce que tu veux en sortie pour que ça soit un peu plus clair.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  6. #6
    Membre régulier 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
    Points : 111
    Points
    111
    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

  7. #7
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Bonjour !

    Donc pour donner un exemple, voici ce que j'ai en entrée :

    File Rapport :
    ################################################################
    ################################################################
    ### 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_D381 : VALID

    Pas de description pour ce test

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

    CMD_TRF_Fibre_0001001023_0384674312_D381 : VALID

    Pas de description pour ce test

    --------------------
    Et

    File FFH :
    CMD_ACQ_Fibre_0001001023_0384674312_D381:KO
    File FREG :
    CMD_ACQ_Fibre_0001001023_0384674312_D381:KO
    CMD_TRF_Fibre_0001001023_0384674312_D381:KO
    Je souhaite donc en sortie

    ################################################################
    ################################################################
    ### 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
    FFH : VALID
    FREG : VALID

    Pas de description pour ce test

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

    CMD_TRF_Fibre_0001001023_0384674312_D38 : VALID
    FFH : VALID
    FREG : VALID

    Pas de description pour ce test

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

    CMD_ACQ_Fibre_0001001023_0384674312_D381 : VALID
    FFH : FAILED
    FREG : FAILED

    Pas de description pour ce test

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

    CMD_TRF_Fibre_0001001023_0384674312_D381 : VALID
    FFH : VALID
    FREG : FAILED

    Pas de description pour ce test

    --------------------
    Pour l'instant, j'ai complété le rapport avec une partie FFH en reprenant le nom de chaque test, et idem pour FREG.
    C'est une solution viable mais de secours car à la base j'étais parti pour compléter en insérant en dessous du nom du test.

    Donc s'il y a une solution simple, je suis pour, sinon tant pis.

  8. #8
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    En gros on récupère la valeurs dans File Rapport et on test cette valeur dans File FFH et File REG et on génère un nouveau rapport avec le status compilé de chaque valeur.
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  9. #9
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    J'ai un énorme soucis d'optimisation :

    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
    ::Verification sur FREGATE
    echo Verification des resultats sur FREGATE ...
    IF EXIST %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt DEL %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt 2>nul
    for /f "delims=" %%a in ('type %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Y0EM1.FLUX.RQUETEUR.FREG.FOEXTRAC.txt') do ( 
    	set "flag="
    	for /f "delims=" %%b in ('type %Mon_repertoire%\Modeles\MODELE_FREG.txt') do ( 
    		if "%%a"=="%%b"  (
    			set flag=1
    		)
        )
    	if not defined flag (
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo %%a >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		FOR /f "tokens=1 delims=|" %%E in ("%%a") do (
    			echo %%E:KO>> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\TMP_FREG.txt
    		)
    	)
    	echo b
    )
    Je peux pas rajouter de GOTO, ça break ma boucle principale :

    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
    ::Verification sur FREGATE
    echo Verification des resultats sur FREGATE ...
    IF EXIST %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt DEL %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt 2>nul
    for /f "delims=" %%a in ('type %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Y0EM1.FLUX.RQUETEUR.FREG.FOEXTRAC.txt') do ( 
    	set "flag="
    	for /f "delims=" %%b in ('type %Mon_repertoire%\Modeles\MODELE_FREG.txt') do ( 
    		if "%%a"=="%%b"  (
    			set flag=1
    			GOTO break1
    		)
        )
    :break1
    	if not defined flag (
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo %%a >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		FOR /f "tokens=1 delims=|" %%E in ("%%a") do (
    			echo %%E:KO>> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\TMP_FREG.txt
    		)
    	)
    	echo b
    )
    Comment faire ?

  10. #10
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    fait un call :

    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
    :Verification sur FREGATE
    echo Verification des resultats sur FREGATE ...
    IF EXIST %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt DEL %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt 2>nul
    for /f "delims=" %%a in ('type %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Y0EM1.FLUX.RQUETEUR.FREG.FOEXTRAC.txt') do ( 
    	set "flag="
    	for /f "delims=" %%b in ('type %Mon_repertoire%\Modeles\MODELE_FREG.txt') do ( 
    		if "%%a"=="%%b"  (
    			set flag=1
                    )
            )
    	Call:break1
    )
    
    exit/b
    
    :break1
    	if not defined flag (
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo %%a >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		FOR /f "tokens=1 delims=|" %%E in ("%%a") do (
    			echo %%E:KO>> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\TMP_FREG.txt
    		)
    	)
    	echo b
    )
    N'aurait-tu pas meilleur temps d'utiliser FIND plustôt que de boucler sur chaque ligne ?

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  11. #11
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Le findstr je l'avais mis totalement de côté dans ma tête tellement il m'en a fait baver

    Tu pense que le findstr serait encore mieux ?

    EDIT : J'ai des erreurs chaine à chercher trop longue avec findstr

  12. #12
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    EDIT : J'ai des erreurs chaine à chercher trop longue avec findstr
    Les limites du BAT.

    Peux-tu utiliser une commande externe ? Où tout doit-être en BAT pur ?

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  13. #13
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Les limites du BAT.

    Peux-tu utiliser une commande externe ? Où tout doit-être en BAT pur ?

    Jusque là tout est en BAT concernant la partie Windows. L'utilisateur doit lancer un script et tout se fait tout seul. Je sais pas si intégré un outil externe serait une bonne idée

    Et le call fait-il vraiment gagner du temps ? Ma logique me ferait penser au contraire que c'est l'inverse

    Le top ça serait de pouvoir sortir du for secondaire en restant dans le principal... Et je trouve pas

  14. #14
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Et le call fait-il vraiment gagner du temps ? Ma logique me ferait penser au contraire que c'est l'inverse
    Si tu veux faire ton code de cette manière la question ne se pose pas.

    Maintenant tu dois avoir des lignes vraiment très longues pour que findstr te donne cette erreur.
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  15. #15
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Si tu veux faire ton code de cette manière la question ne se pose pas.

    Maintenant tu dois avoir des lignes vraiment très longues pour que findstr te donne cette erreur.
    Oui, c'est des lignes avec des données de tables, et y en a beaucoup, elles sont assez longue.

    J'ai un fichier de 2000 lignes et un autre de 6000, ça a pris plusieurs heures hier soir Il faut vraiment que je réduise au plus possible

    Sachant que chacun de ces deux fichiers est comparé à leur jumeau si tout se passe bien... C'est pour ça, là dans mon algo c'est du n² ça craint !!

    EDIT : une des lignes :

    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528138|

    Mais il manque des tas de NUL dans la ligne là, elle est vachement longue, 218 caractères en fait

  16. #16
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    218 caractères ça devrait pas poser de poblèmes avec findstr.

    Exemple :

    test.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528138|
    Salut les filles
    tati.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528138|
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528139|
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528130|
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528134|
    QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| | |2007-10-09-20.07.42.528135|

    Test.bat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    for /f "delims=" %%a in (test.txt) do findstr "%%a" tati.txt >nul && call:trouve "%%a" || call:pasTrouve "%%a"
    exit/b
    
    :trouve
    echo trouv‚ %1
    exit/b
    
    :Pastrouve
    echo pas trouv‚ %1
    Sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    trouvé "QS_NR_CAS01|141586943|TUADPOST|301251243|141586943|2007-10-08|9999-12-31|0003|N|0000000000| |0000|M Nolf Leonel | |0000000000|0000| ||2007-10-09-20.07.42.528138|"
    pas trouvé "salut les gars"
    Tu peux également utiliser un script mixte BAT/Powershell. Mais dans ton cas la première solution est meilleur et surtout plus rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    set $Find="Texte a chercher"
    set $Fichier="toto.log"
    
    for /f  "delims=" %%x in  ('echo Select-String -Path %$Fichier%  -pattern %$Find% ^| powershell -c -') do (
      set $test=%%x
      if defined $test echo trouv‚)
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  17. #17
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    C'est un peu plus rapide, mais c'est pas si énorme.

    Si j'installe diffutils pour Windows, ça sera surement plus rapide. Mais même si j'ai bien sû m'en servir en shell, je pense que je galère trop pour m'y attaquer en batch

  18. #18
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Si j'installe diffutils pour Windows, ça sera surement plus rapide. Mais même si j'ai bien sû m'en servir en shell, je pense que je galère trop pour m'y attaquer en batch
    Si tu cherches juste à pointer les difference entre 2 fichiers, en BAT tu peux utiliser FC.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  19. #19
    Membre régulier 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
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Si tu cherches juste à pointer les difference entre 2 fichiers, en BAT tu peux utiliser FC.

    Non en fait pas possible, pck la ligne peut exister mais ne pas être à la même place... Et certaine peuvent être dans le modèle mais pas dans le fichier auquel on le compare...
    Je dois chercher la ligne dans le fichier coute que coute. Par contre si je pouvais arrêter de chercher quand je l'ai trouvée, ça serait bien.

    Au fait après test ta solution était plus rapide mais jamais elle trouvait de différences alors qu'il y en avait -_- je cherche pourquoi

    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
    echo Verification des resultats sur FREGATE ...
    IF EXIST %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt DEL %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt 2>nul
    for /f "delims=" %%a in ('type %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Y0EM1.FLUX.RQUETEUR.FREG.FOEXTRAC.txt') do ( 
    	set "flag="
    	set "$Find=%%a"
    	set "$Modele=%Mon_repertoire%\Modeles\MODELE_FREG.txt"
    	for /f  "delims=" %%x in  ('echo Select-String -Path %$Modele%  -pattern %$Find% ^| powershell -c -') do (
    		set $test=%%x
    		if defined $test (
    			set flag=1
    		)
        )
    	if not defined flag (
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo %%a >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		echo ########################## >> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\Diff_FREG.txt
    		FOR /f "tokens=1 delims=|" %%E in ("%%a") do (
    			echo %%E:KO>> %Mon_repertoire%\CAMPAGNE_DE_TEST_bis\TMP_FREG.txt
    		)
    	)
    )
    La variable modele je vais la sortir, ça évitera qu'elle soit redéfinie à chaque fois vu qu'elle ne change pas

  20. #20
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Essaye :

    au lieu de :

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

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

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