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 :

Récupération des lignes entre 2 expressions d'un fichier texte [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut Récupération des lignes entre 2 expressions d'un fichier texte
    Bonjour,

    Dans un log, j'ai 2 expressions qui se répètent, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    lignea
    ligneb
    EXPRESSION1
    lignec
    ligned
    EXPRESSION2
    lignee
    lignef
    ligneg
    EXPRESSION1
    ligneh
    EXPRESSION2
    J'aimerais récupérer dans un autre fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    EXPRESSION1
    lignec
    ligned
    EXPRESSION2
    
    EXPRESSION1
    ligneh
    EXPRESSION2
    Evidemment, ce n'est jamais au même numéro de ligne que EXPRESSION1 ou EXPRESSION2 apparaissent, et il n'y a jamais non plus le même nombre de lignes entre les 2 expressions.

    Je sais récupérer une ligne dans laquelle se trouve une expression via findstr mais je galère à trouver le moyen de récupérer les lignes qui se trouvent entre les 2 expressions.

    Une idée ?

    Merci !

  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,

    Tu boucles sur les lignes de ton fichier, quand tu vois EXPRESSION1 tu rediriges les lignes dans un nouveau fichier.
    Quand tu vois EXPRESSION2 tu arrêtes.

    Un petit flag te permettera de faire cela tranquillement.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Je ne sais pas faire, l'histoire des flags...

    Boucler sur les lignes du fichier, mettre la ligne contenant EXPRESSION1 et/ou la ligne contenant EXPRESSION2 dans un autre fichier ça va. Mais je ne vois pas comment dire "à partir" de la ligne contenant EXPRESSION1 copie les lignes, arrête à EXPRESSION2.

    Ou alors c'est tout con et ça m'échappe, ça peut m'arriver...

  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
    Un flag, c'est une petite variable, en générale un booleen que tu positionnes à différentes valeurs afin de t'indiquer un état.

    Dans ton cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FLAG=0
    Boucle FOR (
        if EXPRESSION 1 (FLAG=1)
        if FLAG==1 (copier ligne)
        if EXPRESSION 2 (FLAG=0)
    )
    Reste à tout mettre en batch. Ne pas oublier les expansions retardées de variables pour ton flag (si tu ne sais pas de quoi je parle, fait une recherche sur ce forum, il y a un post par semaine la dessus en moyenne).

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Un jour j'apprendrais à réfléchir...

    Merci pour ton aide !

    Ce n'est pas la 1ère fois que je fais des flags s'en m'en rendre compte... Ca devrait rouler avec cette astuce.

    Je clos le sujet dès que ça fonctionne...

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Bon, j'arrive à faire ce que je voulais mais j'aimerais y apporter des améliorations.

    En fait, cela me sert à extraire d'une bande de caisse, tous les tickets dont le prix a été forcé.

    Voici la partie du code qui nous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set flag=0
    for /f "delims=" %%a In ('type bdc.txt') do (
    set a=%%a
    set b=!a:~15,37!
    set c=!a:~42,5!
    if !c!==TARIF set flag=1
    set d=!a:~23,8!
    if !d!==NOUVEAUX set flag=0
    if !flag!==1 echo !b! >> forcpx.txt
    )
    1er problème, il m'arrive que la variable b soit vide car les 37 caractères à partir du 15è ne sont que des espaces, ce qui m'affiche dans mon fichier résultat le statut de la commande echo : "Commande ECHO désactivée".
    J'ai tenté avec ERRORLEVEL, essayé avec un test si b=0 ou b=="", avec la commande if defined mais rien ne fonctionne...

    2ème problème, ou plutôt amélioration souhaitée, sauter un certain nombre de lignes entre 2 tickets, c'est-à-dire entre le passage du flag de 0 à 1.

    Merci d'avance pour les pistes !

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

Discussions similaires

  1. [VBS]Multiple récupération de ligne(s) du contenu d'un fichier texte
    Par ProgElecT dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 29/05/2015, 23h33
  2. Réponses: 4
    Dernier message: 22/07/2010, 15h46
  3. Réponses: 4
    Dernier message: 14/12/2009, 13h43
  4. Réponses: 4
    Dernier message: 20/06/2009, 11h26
  5. Récupération des relations entre tables
    Par Themacleod1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h34

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