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 :

[regex] comparation, manipulation de strings


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Points : 48
    Points
    48
    Par défaut [regex] comparation, manipulation de strings
    Bonjour camarades!

    j ai une chaine de caracteres comme ca:
    CAN-Mapping:
    1000-------- : 0
    0010-------- : 0
    1010-------- : 1
    0011-------- : 0
    1011-------- : 1
    1110-------- : 2
    0110-------- : 2
    0111-------- : 2
    1111-------- : 2
    et j ai ecris ce morceau 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
    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
    #!/usr/bin/perl -w
     
    use strict;
    use warnings;
     
     
     
     
    print "\n", "CAN-Mapping: ", "\n";
    my $can_map = <STDIN>;
    chomp $can_map;
    print "\n";
     
     
     
    my @array=();
    my @array_keys=();
    my @array_values=();
    my @string_to_array=();
    my %hash=();
    my $signe_de_separation;
     
    print my $can_mapings = 'CAN-Mapping:
    1000-------- : 0
    0010-------- : 0
    1010-------- : 1
    0011-------- : 0
    1011-------- : 1
    1110-------- : 2
    0110-------- : 2
    0111-------- : 2
    1111-------- : 2', "\n";
    @array=split(/\n/, $can_mapings);
    for my $ind1 (@array)
    	{
    	$ind1 =~ / : \d/;
    	$signe_de_separation = $&;
    	push(@array_keys, $`);
    	push(@array_values, $signe_de_separation);	
    	}
    		shift(@array_keys);
    		shift(@array_values);
     
    my $string_to_array=();
     
    for (my $i=0; $i<=$#array_keys; ++$i)
    {
    $hash{$array_keys[$i]}=$array_values[$i];
    }
    for my $key (keys %hash)
    {
    foreach my $pos (grep substr($key, $_, 1) =~ /\d/, 0 .. length ($key) - 1)
    {
    if(substr($can_map, $pos, 4) eq substr($key, $pos,4))
    {
    print "\n";
    print $can_map.$hash{$key};
    }
    }
    }
    je donne un input $can_map et je dois lui attribuer une valeur ( : 0, :1 ou :2)
    a l aide des valeurs enrigistrer dans $can_mapings.

    Exemple:
    C:\Perl\bin>perl U:\praktikum\souce_code_perl\test.map.pl

    CAN-Mapping:
    111100001111

    CAN-Mapping:
    1000-------- : 0
    0010-------- : 0
    1010-------- : 1
    0011-------- : 0
    1011-------- : 1
    1110-------- : 2
    0110-------- : 2
    0111-------- : 2
    1111-------- : 2

    111100001111 : 2
    alors les bits "fixes" de mon inputs sont identiques avec les bits fixes de
    1111-------- : 2 alors on attribue a 111100001111 la valeur ' : 2'

    si l ordre des can_mapings change je sais pas quoi faire
    exemple:
    CAN-Mapping:
    1000-------1 : 0
    0010---11--- : 0
    1010-------- : 1
    0011-----1-- : 0
    1011-------- : 1
    1110----11-- : 1
    0110-------- : 2
    0111-------- : 2
    1----------1 : 2
    dans ce cas ce que j ai ecris dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(substr($can_map, $pos, 4) eq substr($key, $pos,4))
    {
    print "\n";
    print $can_map.$hash{$key};
    }
    n est plus valable et je dois chercher une autre methode!
    c est mon probleme!
    Merci pour votre aide!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Pour les regex, tu peux tester à partir d'une variable à l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if ($t =~ /\Q$regex\E/)
    Et dans $regex, tu peux mettre par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $regex = "1111........";

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Points : 48
    Points
    48
    Par défaut
    Probleme resolu!

    voici le 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
    #!/usr/bin/perl -w
     
    use strict;
    use warnings;
     
     
     
     
    print "\n", "CAN-Mapping: ", "\n";
    my $can_map = <STDIN>;
    chomp $can_map;
    print "\n";
     
     
     
    my @array=();
    my @array_keys=();
    my @array_values=();
    my @string_to_array=();
    my %hash=();
    my $signe_de_separation;
     
    print my $can_mapings = 'CAN-Mapping:
    1000-------- : 0
    0010-------- : 0
    1010-------- : 1
    0--------111 : 0
    1011-11----- : 1
    1110---11--- : 2
    0110-------- : 2
    0111-------- : 2
    1111-------- : 2', "\n";
    @array=split(/\n/, $can_mapings);
    for my $ind1 (@array)
    	{
    	$ind1 =~ / : \d/;
    	$signe_de_separation = $&;
    	push(@array_keys, $`);
    	push(@array_values, $signe_de_separation);	
    	}
    		shift(@array_keys);
    		shift(@array_values);
     
    my $string_to_array=();
     
    for (my $i=0; $i<=$#array_keys; ++$i)
    {
    $hash{$array_keys[$i]}=$array_values[$i];
    }
    for my $key (keys %hash)
    {
    my $key_temp=$key;
    $key =~ s/-/[01]/g;
    my $rex= qr/$key/is;
    if($can_map =~ m /$rex/){
    print "\n";
    print $can_map.$hash{$key_temp};
    }
     
    }
    Merci BSans en tout cas

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

Discussions similaires

  1. fonction manipulant une string
    Par salseropom dans le forum C
    Réponses: 16
    Dernier message: 21/02/2006, 13h18
  2. [STRING] Manipulation de string
    Par Hoegaarden dans le forum Langage
    Réponses: 2
    Dernier message: 30/11/2005, 14h46
  3. [java] manipulation de string
    Par n8ken dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 11h08
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. [MFC] Manipulation de string
    Par mulot49 dans le forum MFC
    Réponses: 2
    Dernier message: 24/08/2004, 16h43

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