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 :

Somme de valeur


Sujet :

Langage Perl

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut Somme de valeur
    Bonjour à tous,
    J'ai besoin d'une aide concernant un probleme:
    En fait j'ai un fichier 1 qui contient des ligne et des valeur sous cette forme :
    bonjour 1
    les 3
    Amis 5


    un Deuxieme fichier :
    bonjour 1
    les 2
    Amis 4

    je cherche une idee comment qui lit ces 2 fichier et qui produit un fichier somme de valeur sous cette forme

    bonjour 2
    les 5
    Amis 9

    Merci pour votr aide
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si je suppose que la règle est que les chiffres à additionner sont toujours la dernière information sur la ligne du fichier, je peux faire un truc dans ce genre:

    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
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier 2.txt/;
    open my $FIC1, "<", $fichier1, or die "impossible ouvrir $fichier1 $! \n";
    open my $FIC2, "<", $fichier2, or die "impossible ouvrir $fichier2 $! \n";
     
    while (my $line1 = <$FIC1>) {
         chomp $line1;
         my ($texte, $value1) = ($1, $2) if $line1 =~ /^([\w\s]+)(\d+)$/;
         my $line2 = <$FIC2>;
         chomp $line2;
         my $value2 = $1 if $line2 =~ /(\d+)$/;
         my $tot_val = $value1 + $value2;
         print "$texte $tot_value\n";
    }
    close $FIC1;
    close $FIC2;
    Il n'y a bien sûr aucun contrôle que le texte récupéré dans le fichier 1 correspond à celui qui se trouve dans le fichier2, on suppose que leur construction est bien parallèle et correcte.

    Le résultat est ici imprimé à l'écran (et peut être redirigé vers un fichier le cas échéant), mais il n'est pas difficile d'ouvrir un troisième fichier pour écrire dans celui-ci.

  3. #3
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Lolo87 pour votre aide precieuse,
    J'ai essayé de compiler ce script, mais il maffiche ce message :
    Execution of ./perl.pl aborted due to compilation errors.
    je pense une erreur au niveau de la ligne 7


    Avez vous une idée svp?
    Merci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par étoile de mer Voir le message
    J'ai essayé de compiler ce script, mais il maffiche ce message :
    Execution of ./perl.pl aborted due to compilation errors.
    je pense une erreur au niveau de la ligne 7
    Je viens de compiler chez moi un copier-coller exact du code posté ci-dessus, je n'ai aucun problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -c add.pl
    add.pl syntax OK
    As-tu changé quelque chose?

    Il y avait cependant deux petites erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier 2.txt/;
    Enlever l'espace entre fichier et 2.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier2.txt/;
    Et corriger la ligne d'impression à la fin, remplacer $total_value par $total_val.:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$texte $tot_val\n";
    Et là, ça imprime:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonjour 2
    les 5
    Amis 9

  5. #5
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Je viens de compiler chez moi un copier-coller exact du code posté ci-dessus, je n'ai aucun problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -c add.pl
    add.pl syntax OK
    As-tu changé quelque chose?

    Il y avait cependant deux petites erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier 2.txt/;
    Enlever l'espace entre fichier et 2.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier2.txt/;
    Et corriger la ligne d'impression à la fin, remplacer $total_value par $total_val.:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$texte $tot_val\n";
    Et là, ça imprime:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bonjour 2
    les 5
    Amis 9
    Merci ça marche
    Le jour est le père du labeur et la nuit est la mère des pensées.

  6. #6
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Bonjour,
    Je suis encore dans le meme contexte

    J'ai un souci avec les valeur à virgule, jai un message d'erreur :

    Use of uninitialized value $texte in concatenation (.) or string at ./perl.pl line 18, <$FIC2> line 1.
    0
    Use of uninitialized value $texte in concatenation (.) or string at ./perl.pl line 19, <$FIC2> line 1.



    Merci d'avance
    Le jour est le père du labeur et la nuit est la mère des pensées.

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    modifie la ligne 7 comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($texte, $value1) = ($1, $2) if $line1 =~ /^([\w\s]+)([,\d]+)$/;
    Idem pour la ligne 10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $value2 = $1 if $line2 =~ /([,\d]+)$/;

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Lolo,
    Avec ce 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
    21
    22
    23
    24
    25
    #!/usr/bin/perl 
    use strict;
    use warnings;
    use feature qw(:5.10);
    my ($fichier1, $fichier2) = qw / fichier1.txt fichier2.txt/;
     
    open my $FIC1, "<", $fichier1, or die "impossible ouvrir $fichier1 $! \n";
    open my $FIC2, "<", $fichier2, or die "impossible ouvrir $fichier2 $! \n";
    open(FICHIERNOUVELLES, ">resultat.txt");
     
    while (my $line1 = <$FIC1>) {
         chomp $line1;
         my ($texte, $value1) = ($1, $2) if $line1 =~ /^([\w\s]+)([.\d]+)$/;
         my $line2 = <$FIC2>;
         chomp $line2;
         my $value2 = $1 if $line2 =~ /([.\d]+)$/;
         my $tot_val = $value1 + $value2;
         print "$texte $tot_val\n";
         print FICHIERNOUVELLES "$texte $tot_val\n";
     
     
    }
    close FICHIERNOUVELLES;
    close $FIC1;
    close $FIC2;
    fichier1 :
    a a 4

    fichier2:
    a a 1.1

    fichier resultat :
    a a 1 4.1

    ce qui est faux
    Le jour est le père du labeur et la nuit est la mère des pensées.

  9. #9
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Hum, je viens d'essayer.

    En imprimant les différentes variables, j'obtiens bien:
    - $value1 = 4
    - $value2 = 1.1
    - $tot_val = 5.1

    et 'print "$texte $tot_val\n";' m'affiche "a a 5.1".

    Fais comme moi, affiche chacune des valeurs intermédiaires pour débuguer et essayer de trouver où se trouve l'erreur dans ton programme.

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Lolo, j'ai essayé de faire des verification avec les affichage:
    quand j'inverse le contenu des 2 fichier de cette sorte :
    fichier1 :
    a a 1.1

    fichier2:
    a a 4


    ca m'affiche ca :

    a a 4 1.1

    avec value1 = .1

    et value2 = 4
    Le jour est le père du labeur et la nuit est la mère des pensées.

  11. #11
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Oui, si tu intervertis les deux fichiers, il y a un petit problème.

    Et le problème est qu'il faut définir très précisément le motif que tu risques de rencontrer (combien de lettres, combien de chiffres, etc.

    Si tu changes la ligne 13 du code que tu as posté en dernier avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($texte, $value1) = ($1, $2) if $line1 =~ /^([a-zA-Z\s]+)([.\d]+)$/;
    ça va marcher:

    Mais ça veut dire que si ton fichier contient "a2 a 1.1" au lieu de "a a 1.1", ça ne marchera plus (le 2 ne sera plus reconnu).

    Donc, encore une fois, la question est de définir très précisément les données en entrée.

  12. #12
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci Lolo87
    Le jour est le père du labeur et la nuit est la mère des pensées.

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

Discussions similaires

  1. comment obtenir la somme des valeurs
    Par lnpt23 dans le forum Bases de données
    Réponses: 8
    Dernier message: 19/06/2006, 17h41
  2. fonction sur la somme des valeurs issues d'une requete
    Par iam dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/06/2006, 21h35
  3. Somme de valeur
    Par Nadaa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/05/2006, 10h57
  4. Somme des valeurs de certaines lignes
    Par Tartenpion dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/02/2006, 16h46
  5. Somme de valeurs d'une colonne d'un DBGrid
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/12/2004, 23h58

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