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

Shell et commandes GNU Discussion :

[Bash] Extraire commentaire d'un fichier C


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2
    Par défaut [Bash] Extraire commentaire d'un fichier C
    Bonjour à tous !

    Je viens ici vous demander de l'aide car je sèche complètement sur un exercice que l'on me demande pour ma fac.

    J'ai un fichier C quelconque, et en tête du fichier, on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /**
     * Ligne de commentaires qui varient selon les fichiers 
     * mais toujours selon le même schéma...
    */
    On me demande, grâce à un script bash (et seulement bash) de récupérer les commentaires entre /** et */ au début du fichier et de sortir tout ça dans un fichier dédié. On m'impose également que le script doit être appellé via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monscript < fichier_dont_je_dois_récupérer_le_commentaire.c > fichier_à_sortir
    J'ai pensé à utiliser grep pour récupérer le tout dans une variable et affiner par la suite, mais je ne vois déjà pas vraiment comment accéder à mon fichier ($0 est bien ./monscript mais évidemment, $1 ne représente rien...).

    Quelqu'un aurait-il quelque chose pour me mettre sur la piste ? J'ai pas trouvé de réponse sur le net...
    Merci de prendre le temps de me répondre.

    PS : Je peux tout à fait copier les fichiers fournis pour avoir des exemples si besoin.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonjour,

    grep ce n'est déjà plus bash

    appeler tel que demander, il n'y a pas d'arguments au script, il n'y a que le flux provenant du fichier; il faut le lire avec une boucle while read (voir Comment lire/parser un fichier).

    il faut tester une "variable-drapeau" (mise sur 1 quand la ligne commence par /**, passée à 0 quand la ligne commence par */) pour afficher les lignes demandées.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 160
    Par défaut
    Je ne savais pas qu'on pouvait aller aussi loin avec le shell.

    En fait si on connait le C et le bash, les outils tels que grep, sed, etc .. sont superflus
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Bonjour,
    Et si, on peut pousser le bouchon assez loin, voici une façon de faire par exemple, mais sans expliquer comment cela fonctionne car assez simple (mais pas conventionnel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat comment.c
    /**
     * Ligne de commentaires qui varient selon les fichiers
     * mais toujours selon le même schéma...
    */
    toto
    titi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat comment.bash
    #!/bin/bash
    f(){
            [[ $x -eq 0 ]] && x=1 && return
            [[ "${t[$l]:0:3}" = "/**" ]] && x=2
            [[ "${t[$l]:0:2}" = "*/" ]] && x=1 && echo -n "${t[$l]}"
            [[ $x -eq 2 ]] && echo -n "${t[$l]}"
            l=$((l+1))
    }
    x=0; l=0; readarray -c 1 -C f t
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ comment.bash <comment.c
    /**
     * Ligne de commentaires qui varient selon les fichiers
     * mais toujours selon le même schéma...
    */

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    toujours+court(){
       [[ $2 = "/**"* ]] && x=1
       ((x)) && echo "$2"
       [[ $2 = "*/"* ]] && x=0
    }
    readarray -t -c 1 -C toujours+court
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Cela ne fonctionne pas chez moi, le $2 est vide...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/01/2009, 11h34
  2. Des commentaire dans un fichier.xml
    Par Edoxituz dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 22/01/2006, 18h44
  3. Existe il un moyen d'ajouter des commentaire dans un fichier
    Par Edoxituz dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 21/01/2006, 12h31
  4. Des commentaires dans le fichier Boot.ini
    Par Furius dans le forum Windows
    Réponses: 6
    Dernier message: 27/10/2005, 10h41
  5. Inserer un commentaire dans un fichier Ini
    Par Rustine dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 18h33

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