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

Linux Discussion :

Lecture d'un fichier avec des espaces


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 66
    Points
    66
    Par défaut Lecture d'un fichier avec des espaces
    Bonjour,

    je fais un script shell qui va lire un fichier texte et en récupérer des infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while read line
    do
        Traitements
    done < $file
    Je dois récupérer certaines informations de la ligne parcourue.
    Pour cela je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    code=`expr substr $line 12 2`
    Mon problème :
    j'ai une ligne qui ressemble à ça : "________5030120090318700000"
    et je veux récupérer le 01

    Pb : le $line ne prend pas en compte les espaces au début (que j'ai remplacé par des _), du coup, je récupère : 18.

    Avez-vous une solution ?? Merci

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    J'ai modifié le séparateur de champs en lisant mon fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while IFS=: read line
    do
        Traitements
    done < $file
    Si je fais un echo, il m'affiche bien ma ligne avec les espaces.

    Par contre le substr me renvoie toujours la même valeur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    cut -c12,13 $ligne

    pour récupérer le 12 et 13ème caractère

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    C'est quasiment bon...

    La commande correspond bien mais j'ai une erreur :
    cut: cannot open : 5030120090318700000
    C'est peut être parce que je suis déjà en train de lire le fichier ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    si tu veux lire le douzième et treizième caractère de chaque ligne tu fais juste :

    cut -c12,13 $file



    sinon explique ce que tu veux faire précisément

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    Il fallait que fasse des traitements spécifiques selon le code récupéré.

    Du coup, j'ai enregistré dans un tableau les valeurs du 12 et 13ème caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    j=1
    for i in $(cut -c12,13 $fileRCE); do
       tab[$j]=$i 
       j=$j+1
    done
    Et après j'ai un compteur de ligne dans mon while read qui me permet de récupérer la valeur de mon tableau :

    Merci Ashin

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    Alors en fait plus besoin de faire de tableau.

    Il fallait juste ajouter des " :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    code=`expr substr "${line}" 12 2`
    Et donc pas besoin de cut

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

Discussions similaires

  1. Lecture d'un fichier avec des caractères spéciaux
    Par pyrrhus33 dans le forum C++
    Réponses: 4
    Dernier message: 27/10/2014, 14h10
  2. Nom de fichier avec des espaces, problème dans un script
    Par laloupiote dans le forum Shell et commandes GNU
    Réponses: 18
    Dernier message: 08/02/2013, 16h56
  3. lecture d'un fichier avec des caractères spéciaux
    Par Invité dans le forum SAS Base
    Réponses: 24
    Dernier message: 20/01/2011, 09h50
  4. Réponses: 4
    Dernier message: 04/06/2007, 15h28
  5. Problème de chemin de fichier avec des espaces
    Par Akronyme dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 11/12/2006, 17h12

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