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] Suppression d'espaces avec des expressions regulieres


Sujet :

Langage Perl

  1. #1
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut [langage] Suppression d'espaces avec des expressions regulieres
    Bonjour,

    Il me faudrait quitter le dernier caractere d'une chaine de caractere si celui-ci est un espace, je dois le faire avec une expression reguliere mais je ne sais pas comment le coder.

    Pouvez me dire comment faire???

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Ca veut dire quoi "quitter un caractère" ?

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Si tu parles d'éliminer les espaces au bout d'un string, voici comment faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $string = "Bonjour espaces      ";
    $string =~ s/\s*$//;
    Pas testé, mais ça devrait fonctionner. Au pire, ça va détruire l'univers.

  4. #4
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    j'ai testé ton code vince et à priori ma baraque est encore là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $string =~ s/\s$//;
    devrait ne te détruire que le dernier espace ! si c'est ce que tu cherches !

    sinon dérivé de ça tu peux te faire des fonctions

    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
     
    # suppression des espaces en début ET fin de chaine
    sub trim($)
    {
    	my $string = shift;
    	$string =~ s/^\s+//;
    	$string =~ s/\s+$//;
    	return $string;
    }
    # suppression des espaces à gauche de la chaine
    sub ltrim($)
    {
    	my $string = shift;
    	$string =~ s/^\s+//;
    	return $string;
    }
    # suppression des espaces à droite de la chaine
    sub rtrim($)
    {
    	my $string = shift;
    	$string =~ s/\s+$//;
    	return $string;
    }
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  5. #5
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    rcageot, un peu de refactoring sur ton code si tu permets:

    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
     
    # suppression des espaces en début ET fin de chaine
    sub trim($)
    {
    	my $string = shift;
    	return ltrim(rtrim($string));
    }
     
    # suppression des espaces à gauche de la chaine
    sub ltrim($)
    {
    	my $string = shift;
    	$string =~ s/^\s*//;
    	return $string;
    }
     
    # suppression des espaces à droite de la chaine
    sub rtrim($)
    {
    	my $string = shift;
    	$string =~ s/\s*$//;
    	return $string;
    }
    ;-)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    mais pourquoi diable transformer quelquechose qui prend une ligne en un appel de fonction qui donne au finale un truc encore plus long rien que pour l'appeler ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $string = triml($string);
    # 25 chars (plus la definition de la fonction)
     
    $string =~ s/^\s+//;
    # 20 chars
    de plus si je puis moi aussi me permettre qq remarques, la suppression leading et trailing peut sans probleme se faire en une seule regexp : s/^\s+|\s+$//g;
    et de meme il vaut mieux utiliser \s+ que \s*

    hmm desolé si je suis desagreable, j'ai eu une journée chiante...
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  7. #7
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    pospos: parce que trim() retourne une chaîne de caractère, donc on peut dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (trim($chaine) ne "") {
      print "Pas vide\n";
    }
     
    @tableau = map { trim($_) } @tableau;
    etc.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    oui mais bon la plupart des utilisation reviennent à du in place à la fin, puisqu'au fon il n'y a souvent aucune raison de conserver la version "avec espaces".

    par exemple ton map est encore plus court en in place (et bcp plus efficace):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map {s/^\s+//} @tableau
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  9. #9
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Sinon, une autre variante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chop $string if $string =~m/\s$/
    En Perl TIMTOWTDI
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    tiens pour le delire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
        local $/=' ';
        chomp $string;
    }
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  11. #11
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Citation Envoyé par pospos
    tiens pour le delire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
        local $/=' ';
        chomp $string;
    }
    Héhéhé, j'ai pensé au même, mais le mien tient sur une ligne
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  12. #12
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Woufeil:

    pour enlever tous les espaces à la fin, remplace ton 'if' par 'while'.

  13. #13
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    Merci pour ces éléments, je suis en train de faire des tests, mais quand j'essaye d'utiliser TRIM(), j'ai un message d'erreur qui me dit:

    Undefined subroutine &main::trim
    Pouvez me dire s'il faut utiliser une librairie en particulier et laquelle??

    Merci

  14. #14
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    et bien pour utiliser trim qui n'existe pas en perl il te faut le déclarer en tant que sub dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     mon code ..
     etc.
     etc.
     $mavar1 = trim($mavar2);
     etc.
     etc.
     exit;
     
     sub trim {
        return (unevaleur)
     }
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  15. #15
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Je n'arrive pas à faire ce que je veux exactement, j'utilise des HASH et c'est un peu plus compliqué que je croyais.

    En fait, j'explique rapidement:
    je lis un fichier temporaire qui est le résultat de la lecture d'un fichier binaire avec une struture XML.
    Je récupère chaque champ et les combines avec CSV_XS qui permet de me créer un fichier au format CSV.

    L'espace à la fin d'une chaine de caractère est interprété comme un 0 avec CSV_XS. Comme je n'arrive pas à le quitter, je voudrais chercher la chaine de caractère suivante:

    "0"
    et la remplacer par

    "
    Cela est-il possible avec des expressions régulières? ou d'une autre manière???

    Merci

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    tu peux reprendre tous les exemples donnés si dessous en remplacant "\s" (ou parfois " ") par "0" et ca marchera nikel
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  17. #17
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    ok, parfait, mais encore un petit pb.

    il me faut trouver la chaine

    "0"
    mais pas celle-ci

    ;"0"
    Est-il possible de mettre 2 conditions dans une expression régulière?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    ha donc tu a des guillemets autour de ta valeur?
    ca change un peu les choses
    et tu veux remplacer "0" par un guillemet seul?

    si c'est le cas sa doit donner un truc de ce genre:
    et si tu veux eviter le ; juste avant il faut utiliser les zero length assertions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string =~ s/(?<!;)"0"$/"/;
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

Discussions similaires

  1. Controle optionnel avec des expressions regulieres
    Par lagdu dans le forum Général Python
    Réponses: 2
    Dernier message: 12/02/2009, 09h56
  2. Réponses: 2
    Dernier message: 12/05/2008, 18h17
  3. [RegEx] probleme avec une expression reguliere
    Par SharKeR dans le forum Langage
    Réponses: 9
    Dernier message: 07/04/2006, 16h50
  4. Réponses: 17
    Dernier message: 16/07/2004, 12h19
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

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