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

Langage Perl Discussion :

[langage] PB normalisation de chaine de caractères


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 15
    Par défaut [langage] PB normalisation de chaine de caractères
    bonjour ,
    je travaille sur la normalisation de données récupérées à partir de bases Excel.
    J'ai converti le fichier Excel en TXT délimité par des tabulations. Puis ensuite je fais une lecture du fichier ligne par ligne et je stocke les données dans un tableau par un split au niveau des tabulations. A partir de là je souhaite récuperer qu'une partie des données (un champ en particulier) pour l'écrire dans un autre fichier. Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ouverture du fichier1 à lire
    open(FILER1, "PileCréateurs1.txt");
    #ouverture ou création du fichier à creer (en mode écriture)
    open(FILEW, ">>pileCrea.txt");
     
    while ($ligne1=<FILER1>){
    #division de chaque ligne en champ entre les tabulations
    @champs1 = split(/\t/,$ligne1);
    print FILEW "$champs1[8]\n";
    }
    ici on récupere par exemple le contenu du 9eme champ...

    9a marche cependant j'ai un probleme sur un champ "ville" (d'une adresse) ou apparemment il me fait automatiquement un retour chariot (bien k'il n'y ai rien d'apparent sur le fichier TXT ou je récupere les données!!!
    Pourtant je ne souhaite pas ce retour à la ligne... Alors comment supprimer ce "\n" contenu dans mon champ???
    - Dois-je le stocker dans une nouvelle variable sur laquelle je procede ma normalisation?
    - Mais si j'ai d'autres champs qui me posent ce meme genre de problemes par la suite, faudrait il pas mieux automatiser cette détection et suppression de "\n" quand il existe dans un champ?

    merci d'avance pour le ptit coup de pouce... je sèche!

  2. #2
    Membre émérite
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Par défaut
    Bonjour,

    C'est simplement parce que tu ne vires par le retour chariot de chaque enregistrements.
    Il te suffit de faire un chop apres la lecture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while ($ligne1=<FILER1>){ 
       chop $ligne1;
       #division de chaque ligne en champ entre les tabulations  
       @champs1 = split(/\t/,$ligne1); 
       print FILEW "$champs1[8]\n"; 
    }
    La probleme doit etre cela. C'est pour cela que tu te retrouves avec un retour chariot en trop.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Par défaut
    juste pour preciser :
    il est preferable d'utiliser chomp car chop enleve le dernier caractere (quel qu'il soit).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 15
    Par défaut
    merci pour vos réponses...
    cependant j'ai essayé le chomp sur les lignes... mais c'est vraiment propre à ce champ n°9!!!
    je ne comprends pas! Du coup j'ai ausi réaliser un chomp sur ce champ mais ça ne change rien... alors j'ai procédé autrement...
    çA M'EnErVe!!

  5. #5
    Membre émérite
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Par défaut
    Citation Envoyé par superdada
    merci pour vos réponses...
    cependant j'ai essayé le chomp sur les lignes... mais c'est vraiment propre à ce champ n°9!!!
    je ne comprends pas! Du coup j'ai ausi réaliser un chomp sur ce champ mais ça ne change rien... alors j'ai procédé autrement...
    çA M'EnErVe!!
    Ca provient du fait que le champ numero 9 doit etre le dernier non ?
    Ca ne marche pas avec le chomp dés le debut ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 15
    Par défaut
    oui c'était bien le dernier!!!

    ça marche!
    merci.

    ouffff

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2006, 22h59
  2. Réponses: 5
    Dernier message: 15/11/2005, 12h57
  3. [langage] récupération d'une chaine
    Par sasame dans le forum Langage
    Réponses: 11
    Dernier message: 21/01/2005, 07h33
  4. [langage] longueur d'une chaine lue ds un fichier
    Par perlaud dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 22h36
  5. Réponses: 10
    Dernier message: 22/05/2004, 13h51

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