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

Programmation et administration système Perl Discussion :

Condition sur un nombre à virgule


Sujet :

Programmation et administration système Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut Condition sur un nombre à virgule
    Bonjour,


    J'aimerai faire une condition sur un nombre à virgule :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $infile= 'MATLAB.log';
    my @prstat= `prstat 0 1 | grep -v PID | grep -v Total`;
    #print "@prstat \n";
     
    foreach my $line  (@prstat) {
            my @line=split (/\s+/,$line);
            #La colonne 10 doit contenir MATLAB
            if ($line[10] =~ /MATLAB/) {
                    print "Flag time :  $line[1] $line[8] $line[2] $line[10] $line[9]\n";
                    my @percent=split (/%/, $line[9] );
                    print "Flag pourcentage : $percent[0]\n";
                    if ( $percent[0] > 1) {
                            open (WRITE, ">>$infile");
                            print WRITE "Flag time :  $line[1] $line[8] $line[2] $line[10] $line[9]\n";
                            close (WRITE);
                    }
            }
    }
    J'ai l'erreur suivante :
    Flag time : 16982 6:55:11 user1 MATLAB/66 0,1%
    Flag pourcentage : 0,1
    Argument "0,1" isn't numeric in numeric gt (>) at ./MATLAB_using.pl line 16.


    J'ai essayé une substitution de la virgule par un point mais ma variable $percent[0] prend la valeur dans ce cas....

    Merci de votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 40
    Points
    40
    Par défaut
    Si tu es sur que ton séparateur sera toujours une virgule, voici une version "bourrin":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    use strict;
    use warnings;
     
    my $Value = "0,1";
     
    my @test = split(/,/,$Value);
     
    $Value = join(".",@test);
     
    print "Ok\n" if ($Value < 1);
     
    exit 0;
    Je ne doute pas qu'une version plus élégante sera proposée...

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne vois pas pourquoi un ne fonctionnerait pas ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 40
    Points
    40
    Par défaut
    Apparemment il perd la notion de '0' quand on fait ça... J'ai récupéré 1 à la place de 0,1.

    J'ai du mal à comprendre pourquoi aussi, si quelqu'un a une idée


    A ben non ça passe bien, j'ai du me tromper sur la substitution... je me tais

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    As-tu affiché le résultat de la substitution ?

    Exemple qui fonctionne :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ perl -e '$a="0,1";$a =~ s/,/./;print "a=$a\n", "a*2 = ", $a * 2, "\n"'
    a=0.1
    a*2 = 0.2

    J'ajoute donc : as-tu affiché $percent[0] avant ET après la substitution ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    Ce que je ne comprend pas cela fonctionne en ligne de commande ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     perl -e 'my $value="3,1%"; my @percent=split (/%/,$value); if ( $percent[0] > 1) { print "$value\n";}'
    3,1%
     
     
    perl -e 'my $value="0,1%"; my @percent=split (/%/,$value); if ( $percent[0] > 1) { print "$value\n";}'

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    C'est pour ça que je t'ai demandé
    Citation Envoyé par Philou67430 Voir le message
    J'ajoute donc : as-tu affiché $percent[0] avant ET après la substitution ?
    L'erreur se trouve peut-être ailleurs ...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    Philou

    une fois de plus .......
    J'ai du mal faire ma substitution car le script fonctionne comme ceci :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $infile= 'MATLAB.log';
    my @prstat= `prstat 0 1 | grep -v PID | grep -v Total`;
    #print "@prstat \n";
     
    foreach my $line  (@prstat) {
    	my @line=split (/\s+/,$line);
    	#La colonne 10 doit contenir MATLAB
    	if ($line[10] =~ /MATLAB/) {
    		print "Flag time :  $line[1] $line[8] $line[2] $line[10] $line[9]\n";
    		my @percent=split (/%/, $line[9]);
    		print "Flag pourcentage : $percent[0]\n";
    		$percent[0] =~ s/,/./;
    		print "Flag pourcentage : $percent[0]\n";
    		if ( $percent > 1) {
    			open (WRITE, ">>$infile");
    			print WRITE "Flag time :  $line[1] $line[8] $line[2] $line[10] $line[9]\n";
    			close (WRITE);
    		}
    	}
    }

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour pouvoir t'aider, il faudrait que tu nous donnes un exemple de ce que retourne la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prstat 0 1 | grep -v PID | grep -v Total
    sur ta console...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    Philou,

    Mon dernier poste montre le script avec la bonne correction ....
    Je pense que la substition n’était pas bien faite depuis le début. De souvenir je l'avais entrée dans une variable du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $var =~ (s/,/./,$percent[0]);
    Ce qui avait pour effet de m'enlever le 0 avant le 1. Il est vrai que je ne l'avait pas montrée car des réponses étaient déjà arrivées entre temps...

    Incroyable efficacité
    Encore merci

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Quand un problème semble insoluble, il faut alors se demander si l'on cherche le bon problème...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/01/2015, 10h06
  2. [XL-MAC 2011] Condition sur le nombre d'items contenus dans une liste déroulante
    Par xixil dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2013, 18h55
  3. [JASPER] Condition sur le nombre de page
    Par Piolet dans le forum Jasper
    Réponses: 0
    Dernier message: 26/02/2009, 17h29
  4. Nombre de cellule Si 2 conditions sur deux plages
    Par CNANJO dans le forum Excel
    Réponses: 1
    Dernier message: 24/12/2008, 07h17
  5. Réponses: 11
    Dernier message: 01/05/2007, 00h15

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