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 :

Extraction à partir d'une ligne spécifique dans un document texte [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut Extraction à partir d'une ligne spécifique dans un document texte
    Bonjour à vous,

    J'ai un petit soucis sur un de mes scripts.
    En effet, je ne parviens pas à trouver une solution pour extraire des informations d'un fichier texte à partir d'une ligne spécifique.

    Je développe :

    Je dois afficher le contenu d'un fichier .txt à partir du mot Car_F et ce jusqu'à quelques lignes après ce dernier.
    Ce mot existe en deux fois dans mon fichier.txt.

    De plus, je ne peux pas me focaliser sur le numéro de la ligne car il peut être amener à être différent à chaque ficher.txt que je dois lire...


    Exemple :

    Fichier.txt - Ligne 456 - Contient Car_F
    Fichier2.txt - Ligne 239 - Contient Car_F

    J'ai fait cela :
    for /f %%a in ('findstr "Car_F" "Fichier.txt"') do echo %%a>>result.txt (Problème : N'affiche que le contenu de la ligne recherchée et ce qu'elle que soit les options.)
    Utilisation de more dans la boucle (Problème : Ne se fit qu'au numéro de ligne).

    Pour la suite de mon script, j'ai déjà la solution de tête mais bon je bloque à ce niveau là.

    Merci d'avance pour votre aide et votre retour.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Bonjour,

    Je vais afficher les lignes entre les 2 premier mots 'Car_F' trouvés dans le fichier Car_F.txt. Après on peut peaufiner si ça ne te convient pas exactement.

    Fichier Car_F.txt
    1
    2
    3
    bla Car_F blo
    4
    5
    6
    7
    bla Car_F blo
    8
    9
    10
    bla Car_F blo
    11
    12
    bla Car_F blo
    13
    14
    15
    Fichier Car_F.bat
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set car=Car_F
     
    SETLOCAL ENABLEDELAYEDEXPANSION
    set status=0
    for /f "tokens=*" %%a in (Car_F.txt) do echo %%a |find /i "%car%" >nul 2>nul && set /astatus=!status!+1 || if !status!==1 echo %%a

    Sorti
    4
    5
    6
    7

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Bonjour,

    Tout d'abord merci pour ton retour.

    Il y a un petit hic à tout cela, c'est que le fichier est extrêmement gros.

    Peut-on limiter le nombre de ligne affiché après le premier Car_F ?
    Si j'ai bien compris dans ta boucle, il s'agit de "if !status!==1 echo %%a" qui est sensé indiquer la ligne maximale à laquel le script va s'arrêter.

    Le problème à l'heure actuelle c'est qu'il me fait tout mon document entre les deux Car_F.

    Voici le lien de mon fichier sur lequel je dois rechercher la 8ème ligne après le premier Car_F pour afficher le mot "shounka_nemo_pompier".
    Lien du fichier : https://1fichier.com/?4pgjaorf5t

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le besoin change ?

    'find /i "%car%" >nul 2>nul && set /astatus=!status!+1' : incrémente status de 1 quand le %car% est trouvé.
    '|| if !status!==1 echo %%a' : si le status est égale à 1 il affiche.

    Donc il affiche entre le premier et deuxième %car% trouvé, puisque avant status vaut 0 et après il faut 2.

    Désolé les puristes j'aurai du mettre
    Je vais voir ton fichier

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Yop,

    Merci pour l'éclaircissement, la demande n'a pas été changé mais juste précisé ^^

    La chose réelle que je souhaite ressortir du fichier que ce soit dans une variable ou dans un fichier .txt à cette 8ème ligne après le premier Car_F soit dans ces .txt la ligne disant :
    shounka_nemo_pompier


    Merci d'avance pour ton aide, moi et les incrémentations je comprends quand je l'a lis mais je sais pas encore comment l'utiliser correctement

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ton fichier contient beaucoup de caractère spéciaux, on va rajouter "" à l’affichage pour limiter les erreurs.

    Donc imaginons que tu veuille affiche que 3 lignes max entre les deux permier 'Car_F'. On va ajouter un compteur 'line'
    Je vais mettre sur plusieurs lignes le code pour que tu le comprenne mieux (on pourrai en une)

    Note 1 : 'Goto :fin' pourrai être remplacé par 'Goto :EOF' pour sortir du script, je le met juste pour la pause.
    Note 2 : For /F ignore les lignes vides donc il faut définir linemax en conséquence.

    Code bat : 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
    @echo off
    set car=Car_F
    set linemax=3
     
    SETLOCAL ENABLEDELAYEDEXPANSION
    set /a status=0
    set /a line=0
    for /f "tokens=*" %%a in (test.txt) do echo "%%a" |find /i "%car%" >nul 2>nul && (
    	set /astatus=!status!+1
    	if !status! GEQ 2 Goto :fin
    ) || (
    	if !status!==1 echo "%%a"&set /aline=!line!+1
    	if !line! GEQ %linemax% Goto :fin
    )
     
    :fin
    pause

    Résultat:
    "Û☺"
    "Mrshounka_citroen_nemo_pompier_base"
    "É☻"
    Appuyez sur une touche pour continuer...

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Moi qui pensais que tu voulais plusieurs lignes ...

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

Discussions similaires

  1. insérer ou remplacer une ligne string dans un fichier texte ?
    Par Night_Wolf1619 dans le forum Débuter
    Réponses: 34
    Dernier message: 16/05/2013, 11h49
  2. Suppression d'une ligne particulière dans un fichier texte
    Par Aymeric41 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 29/08/2011, 13h53
  3. Supprimer une ligne vide dans un fichier texte
    Par Tibà22 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/04/2011, 16h58
  4. Lire une ligne spécifique dans un fichier texte
    Par ZRemi dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2010, 13h58
  5. Chercher une ligne aléatoire dans un fichier texte
    Par pyopyo dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2008, 09h26

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