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 :

[ksh] Lecture d'un fichier unicode ligne par ligne


Sujet :

Shell et commandes GNU

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut [ksh] Lecture d'un fichier unicode ligne par ligne
    Bonjour,

    je souhaite lire ce fichier ligne par ligne, seulement, ça foire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for line in `cat TMP`
    > do
    > echo "[${line}]" >>TMP2
    > done
    Contenu du fichier texte :
    # {060803} {奥妙全能白水清莲香洗衣皂 118g*4*20} #
    # {07361140} {家乐瑶柱汁6*1kg} #
    # {12370210} {家乐黑椒酸辣汤-新包装6*20*36g} #
    # {07001116} {鸡汁08年第二波促销装6*1kg} #
    # {12341120} {家乐香炸裹粉12*800g鲜蒜风味} #
    # {07191110} {家乐浓缩火腿汁6*1kg} #
    # {07191130} {家乐牛肉汁6*1kg} #
    # {12290210} {家乐鱼片蔬菜汤-新包装6*20*32g} #
    # {12361120} {家乐香炸裹粉12*800g鲜辣风味} #
    # {11520500} {家乐香辣虾酱12*310g} #
    # {07191120} {家乐浓缩蘑菇汁6*1kg} #
    # {12300210} {家乐西湖牛肉羹-新包装6*20*37g} #
    # {12170210} {家乐日式海鲜味噌汤4*15*31g} #
    # {07361104} {瑶柱汁08年促销装6*1kg} #
    # {07001115} {鸡汁08年2季度促销装6*1kg} #
    # {12250210} {家乐鸡茸玉米羹-新包装6*20*38g} #
    # {08170700} {家乐真味高汤6*830g} #
    # {11500500} {家乐孜然辣酱12*310g} #
    # {07001100} {家乐浓缩鸡汁G3 6*1kg} #
    TMP2 :
    #
    {060803}
    {奥妙全能白水清莲香洗衣皂
    118g*4*20}
    #
    #
    {07361140}
    {家乐瑶柱汁6*1kg}
    #
    #
    {12370210}
    {家乐黑椒酸辣汤-新包装6*20*36g}
    #
    #
    {07001116}
    {鸡汁08年第二波促销装6*1kg}
    #
    #
    {12341120}
    {家乐香炸裹粉12*800g鲜蒜风味}
    #
    #
    {07191110}
    {家乐浓缩火腿汁6*1kg}
    #
    #
    {07191130}
    {家乐牛肉汁6*1kg}
    #
    #
    {12290210}
    {家乐鱼片蔬菜汤-新包装6*20*32g}
    #
    #
    {12361120}
    {家乐香炸裹粉12*800g鲜辣风味}
    #
    #
    {11520500}
    {家乐香辣虾酱12*310g}
    #
    #
    {07191120}
    {家乐浓缩蘑菇汁6*1kg}
    #
    #
    {12300210}
    {家乐西湖牛肉羹-新包装6*20*37g}
    #
    #
    {12170210}
    {家乐日式海鲜味噌汤4*15*31g}
    #
    #
    {07361104}
    {瑶柱汁08年促销装6*1kg}
    #
    #
    {07001115}
    {鸡汁08年2季度促销装6*1kg}
    #
    #
    {12250210}
    {家乐鸡茸玉米羹-新包装6*20*38g}
    #
    #
    {08170700}
    {家乐真味高汤6*830g}
    #
    #
    {11500500}
    {家乐孜然辣酱12*310g}
    #
    #
    {07001100}
    {家乐浓缩鸡汁G3 6*1kg}
    #
    Y a des sauts de ligne involontaire, j'en déduis que je m'y prends mal, comment faire ça proprement en ksh?


  2. #2
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut
    ca serait pas à cause des idéogrammes?

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Les espaces dans le fichier provoque une nouvelle itération dans ton for.
    En clair : supprime les espaces dans chaque lignes
    (ou sers-toi des dièses pour le changement de ligne)

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Non les idéogrammes n'y sont pour rien et je ne veux absolument pas supprimer les espaces, je veux lire le fichier ligne par ligne avec l'alignement et les espaces qu'il contient.

    Apparemment, je me suis fourvoyé, la manière que j'utilise ne lit pas ligne par ligne mais mot par mot

    Des solutions?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat TMP | while read line
    do
    echo $line >> TMP2
    done

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut


    En fouinant j'ai trouvé une technique similaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    { while read line
    do
    echo ${line}
    done } < TMP


    Comment se fait-il que while lit bien une ligne et for que les mots? Es-ce un comportement voulu?


  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 005
    Points
    37 005
    Par défaut
    Comment se fait-il que while lit bien une ligne et for que les mots? Es-ce un comportement voulu?
    readline mets la ligne lu dans la variable "line"
    si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    line="a b c"
    for zot in $line; do echo $zot; done
    tu vas séparer les mots a, b, c
    pour traiter line comme un seul mot, il faudrait remettre des "" autour du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for zot in "$line"; do echo $zot; done
    - W
    PS: je ne sais pas faire avec `cat xyz`

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

Discussions similaires

  1. lecture d'un fichier txt ligne par ligne
    Par SoBaKa dans le forum Général Python
    Réponses: 4
    Dernier message: 06/03/2007, 13h02
  2. Lecture d'un fichier ligne par ligne
    Par kabouns dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 16h46
  3. Réponses: 20
    Dernier message: 09/02/2006, 10h45
  4. [lecture d'un fichier] ligne par ligne
    Par pitit777 dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 12h22
  5. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 20h02

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