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 :

Supprimer des retour à la ligne dans une variable


Sujet :

Langage Perl

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Supprimer des retour à la ligne dans une variable
    Bonjour,

    Je m'initie actuellement au perl. Pour m'entraîner, j'ai décider de faire un petit script qui va chercher des valeurs dans une page web (température, location etc...).

    Mon problème c'est que j'essaie de créer une variable location contenant le nom de la ville, le code postal et le code pays.
    Pour cela je récupère ces trois valeurs dans 3 variables ($ville, $codepost, $pays).
    Une fois récupérées, je les concatènes dans une variable $location de cette manière :
    $location = $ville . ", " . $codepost . ", " . $pays;

    Hors le problème c'est que chaque variables me fait un retour à la ligne ci bien que j'obtiens en résultat :

    print "location = $location"; #---->
    location = Cachan
    , 94230
    , FR

    J'ai essayé d'utiliser chomp() mais il me retourne un boléen.
    J'ai cherché partout, essayé d'utiliser les regexp, mais je ne trouve pas la solution.

    Voici mon 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #!/usr/bin/perl
    #
    #
    #
    # Je tente de créer un script qui va récupérer les données méteos sur le site 
    # weather.com afin de les afficher
    #
    use strict;
    use warnings;
    use open ':utf8';
     
     
    binmode(STDOUT, ":utf8");
    use LWP::Simple;
    use URI::URL;
     
    ########## Les Variables globales ###############
    my $url = url('http://fr.weather.com/weather/today-Cachan-FRXX1567');
    my $temp;
    my $location;
     
     
    ########### Les Fonctions ################
    sub Recup_Web_Page {
    	open(SITE,">site.tmp") || die ("Erreur de creation de SITE") ;
    	print SITE get($url);
    	close (SITE);
    }
     
     
    sub Recup_location {
    	my $result;
    	my $ville;
    	my $pays;
    	my $codepost;	
    	#my $fchier
    	while (<SITE>) {
    		if (/city:"\w*",/) {
    			print $_;
    			$ville = $_;
    			$ville =~ s/^\s*.{6}//g;
    			$ville =~ s/[",]//g;
    			print "ville = $ville";
    		}
    		if (/postcode:"\d*",/) {
    			print $_;
    			$codepost = $_;
    			$codepost =~ s/\s*[a-z:",]//g;
    			print "code postal = $codepost";
    		}
    		if (/cntry:"\w*",/) {
                            print $_;
                            $pays = $_;
                            $pays =~ s/\s*[a-z:",]//g;
                            print "pays = $pays";
                    }
    	}
    	$result = "$ville,"."$codepost,"."$pays";
    	print "result de location = $result";
    	return $result;
    }
     
     
    sub Recup_Temp {
    	my $result;
    	while (<SITE>) {
    		if (/temp:"([\-\+]|)\d",/) {
    			print $_;
    			$result = $_;
    			$result =~ s/\s*[a-z:",]//g;
    		}
    	}
    	return $result;
    }
     
     
     
    ############ Le Main ###########
    Recup_Web_Page();
     
    open(SITE,"site.tmp") || die ("Erreur de lecture de SITE");
    	$temp = Recup_Temp();
    close (SITE);
    open(SITE,"site.tmp") || die ("Erreur de lecture de SITE");
    	$location = Recup_location();
    close (SITE);
     
     
    print "temperature = $temp\n";
    print $location;
    Et voici le résultat :
    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
    	temp:"-1",
    						cntry:"FR",
    pays = FR
    						city:"Cachan",
    ville = Cachan
    						postcode:"94230",
    code postal = 94230
    result de location = Cachan
    ,94230
    ,FR
    temperature = -1
     
    Cachan
    ,94230
    ,FR
    Merci d'avance...

    PS : Je sais c'est pas beau et un peu le fouillis niveau résultat, mais j'apprends ... merci de votre indulgence.

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 164
    Points : 218
    Points
    218
    Par défaut
    Bonjour,
    chomp est un opérateur, si la variable $location vaut "Paris\n", après l'exécution de :
    $location vaut "Paris".
    La valeur renvoyée est le nombre de caractères enlevés , donc 0 ou 1
    car chomp enlève le dernier caractère si c'est un caractère New line, c'est-à-dire "\n". Si la chaîne se termine par plusieurs "\n", seul le dernier est enlevé.
    chomp s'applique à une variable, pas à un litéral.
    Il me semble que chomp peut s'appliquer à une liste.
    Nibroc.


    Citation Envoyé par havany Voir le message
    Bonjour,

    Je m'initie actuellement au perl. Pour m'entraîner, j'ai décider de faire un petit script qui va chercher des valeurs dans une page web (température, location etc...).

    Mon problème c'est que j'essaie de créer une variable location contenant le nom de la ville, le code postal et le code pays.
    Pour cela je récupère ces trois valeurs dans 3 variables ($ville, $codepost, $pays).
    Une fois récupérées, je les concatènes dans une variable $location de cette manière :
    $location = $ville . ", " . $codepost . ", " . $pays;

    Hors le problème c'est que chaque variables me fait un retour à la ligne ci bien que j'obtiens en résultat :

    print "location = $location"; #---->
    location = Cachan
    , 94230
    , FR

    ........................

    Merci d'avance...

    PS : Je sais c'est pas beau et un peu le fouillis niveau résultat, mais j'apprends ... merci de votre indulgence.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je n'ai pas réussis utiliser correctement la fonction chomp(). Je n'obtiens d'elle que des booléens...
    J'ai donc utiliser les regex pour parvenir à mes fins...
    Il y a quelque chose que je n'ai sûrement pas compris avec cette fonction....
    bref voici la solution (pour le bloc qui me posait problème) :
    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
    26
    27
    28
    29
    30
    31
    sub Recup_location {
            my $result;
            my $ville;
            my $pays;
            my $codepost;
            while (<SITE>) {
                    if (/city:"\w*",/) {
                            #print $_;
                            $ville = $_;
                            $ville =~ s/^\s*.{6}//g;
                            $ville =~ s/[",].*$//g;
                            $ville =~ s/[^A-Za-z]//g;
                            #print "ville = $ville\n";
                    }
                    if (/postcode:".*/) {
                            #print $_;
                            $codepost = $_;
                            $codepost =~ s/[^0-9]//g;
                            #print "code postal = $codepost\n";
                    }
                    if (/cntry:"\w*",/) {
                            #print $_;
                            $pays = $_;
                            $pays =~ s/[^A-Z]//g;
                            #print "pays = $pays\n";
                    }
            }
            $result = "$ville" . ", " . "$codepost" . ", " . "$pays";
            #print "result de location = $result\n";
            return $result;
    }
    au final j'obtiens ce que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result de location = Cachan, 94230, FR

  4. #4
    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
    Comme expliqué par nibroc, chomp ne retourne pas la chaine modifiée, il mais modifie la chaine passée en paramètre (par référence).

    Pour chomper une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chomp($ville, $codepost, $pays);
    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. Retour à la ligne dans une variable
    Par fardon57 dans le forum Jasper
    Réponses: 1
    Dernier message: 11/02/2012, 11h22
  2. Suppression du premier champ et des retours à la ligne d'une variable
    Par Bktero dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 12/05/2011, 10h32
  3. Réponses: 2
    Dernier message: 17/04/2010, 23h30
  4. Retour à la ligne dans une variable
    Par kanzarih dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2009, 13h02
  5. Supprimer les retours à la ligne dans une chaine
    Par koktel_dfr dans le forum C
    Réponses: 22
    Dernier message: 03/05/2007, 10h12

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