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 :

[Traitement de fichiers] substitutions


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [Traitement de fichiers] substitutions
    Bonjour, en ce début d'année 2006 ( bonne année à tous d'ailleurs), je suis confronté à un petit problème:

    je dispose de deux 2 fichiers de données, le premier de structure:

    VAL1.1;VAL1.2
    VAL2.1;VAL2.2
    ...

    --> Le ; sert de séparateur

    le second fichier a cette forme:

    ...
    VAL1.2
    ...
    Left = VAL1.2
    ...
    VAL2.2
    ...
    Left = VAL2.2
    ...
    VAL2.2
    ...
    Left = VAL2.2
    ...

    Je souhaite générer un 3ème fichier, identique au fichier 2, à ceci près qu'à chaque motif "Left = ...", je voudrais remplacer la valeur à droite par sa correspondance récupérée via le fichier 1.

    Je ne sais pas vraiment comment m'y prendre, est-ce que vous préconisez Perl pour ce genre de traitement ? D'avance merci pour votre aide

    David M.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Je vais juste rajouter l'esquisse de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #! /opt/perl/bin/perl
     
    open (FVALEUR, $FICHIER1)
    	or die "Impossible de lire le fichier: $!";
    my @ligne;
    my $x;
    my $y;
    my $z;
     
    #open (FECRIRE, $FICHIER3)
    #      or die "Impossible de créer le fichier : $FICHIER3!";
    while (<FVALEUR>){
    	@ligne = split /;/, $_ ;
    	$x = @ligne[0];
    	print "obid = $x\n";
    	$y = @ligne[1];
    	print "class = $y\n";
    	sed -e "s/   Left = $y/   Left = $x/g" FICHIER2 > FICHIER3
    }
    close FVALEUR;


    en fait la ligne qui me pose problème est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/   Left = $y/   Left = $x/g" FICHIER2 > FICHIER3
    je n'arrive pas à implémenter ceci. Je sais que syntaxiquement, c'est complètement faux, mais dans l'idée, c'est ça :?

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Tu ne semble pas parti dans la bonne direction ...

    Une solution serait :
    • - de lire ton fichier des correspondances, ligne à ligne.
      - pour chaque ligne (attention, ne pas oublier de la chomper !), la splitter dans deux variables et indexer un hash contenant les parties de gauches en utilisant la partie de droite comme clef.
      - fermer le fichier des correspondances.

      - lire le fichier à transformer ligne à ligne.
      - pour chaque ligne (chompée au besoin), si le motif "Left = " est présent, récupérer la partie à droite du signe =.
      - si le hash constitué au début contient une valeur dont la clef est la partie droite récupérée ci-dessus, remplacer cette partie après le signe "=" par la valeur du hash.
      - sortir la ligne dans le fichier de sortie (qu'il s'agisse d'une ligne tierce, non transformée après lecture, ou d'une ligne altérée car elle contenait "Left ="
      - fermer les fichiers.



    Cet algorithme est fonctionnel, mais il n'est pertinent que si les éléments en partie droite du fichier des correspondances sont uniques, ou correspondent toujours au même élément de partie gauche.

    Bon courage ...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    OK c'est ce que j'ai fait hier, je créé un tableau associatif avec mon fichier de correspondance, c'était possible car les valeurs suivent forcément les clés.
    Et ça marche très bien, merci.

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

Discussions similaires

  1. Script de traitement de fichier
    Par llaurentt dans le forum Linux
    Réponses: 14
    Dernier message: 11/01/2006, 12h54
  2. traitement de fichier
    Par loic_86 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h56
  3. Réponses: 1
    Dernier message: 24/07/2005, 22h25
  4. TRaitement de fichier avec PERL
    Par Dr_GonZO dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2005, 12h38
  5. traitement de fichier XML dans une Tache planifiée
    Par marivi dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/06/2005, 10h40

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