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 :

Opération sur un fichier et lecture ligne par ligne


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Opération sur un fichier et lecture ligne par ligne
    Bonjour,

    J'ai besoin de réaliser quelques opérations sur un fichier et pour cela j'aimerai le parcourir ligne par ligne.
    Etant donné que je connais sa structure, j'aimerai pouvoir le lire ligne par ligne, dans un intervalle de ligne (je sais à quoi correspondent les X premieres lignes, les Y suivantes...).
    On trouve sur internet de multiples tutos qui expliquent comment lire un fichier avec un while, mais pas avec un for!

    Y a t-il une expression de type "de la ligne x à la ligne y, lire le fichier ligne par ligne dans la variable ligne"?

    Merci

    teunniq

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    Bonjour,

    On trouve sur internet de multiples tutos qui expliquent comment lire un fichier avec un while, mais pas avec un for!
    parce que ce n'est pas la meilleure façon de faire !

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lignesSautees=$((ligneDebut-1))
    mapfile -t -s $lignesSautees -n $nbLignes nomTableau < tonFichier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    parce que ce n'est pas la meilleure façon de faire !
    C'est ce qu'il m'a semblé lire effecitvement ^^

    Je ne connaissais pas mapfile, très intéressante comme commande.
    Si je comprend bien, ça permet de mettre tout un fichier dans un tableau (1 ligne pour 1 case ) ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    [...]ça permet de mettre tout un fichier dans un tableau (1 ligne pour 1 case ) ?
    sans options, oui.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup. Du coup j'ai fait un petit test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligneDebut=5
    nbLignes=24
    lignesSautees=$((ligneDebut-1))
    mapfile -t -s $lignesSautees -n $nbLignes nomTableau < fich
    echo ${monTableau[*]}
    Petit souci, je n'ai aucun retour sur la console, comme si le tableau était vide (pourtant j'ai bien vérifié à l'aide d'un cat, le fichier n'est pas vide!)
    Une idée ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomTableau != monTableau

    je ris, je ris, mais ça m'est déjà arrivé. j'en ris d'autant plus avec bon coeur

    et, à moins de savoir pourquoi, il vaut mieux "lister" un tableau entre guillemets , et avec @ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' "${nomTableau[@]}"

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Outch, j'avoue que là j'ai honte (le moment pour mes yeux de faire une pause d'écran!)

    Merci pour ces précisions, c'est résolu !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/07/2010, 21h16
  2. Lecture d'un fichier ligne par ligne
    Par kabouns dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 15h46
  3. Réponses: 20
    Dernier message: 09/02/2006, 09h45
  4. [lecture d'un fichier] ligne par ligne
    Par pitit777 dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 11h22
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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