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 :

incrémenter un code


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut incrémenter un code
    Bonjour à tous,

    J'ai un petit probleme concernant une incrémentation.

    Suite à une requete, je récupère un code de la forme A00010-001.
    Je voudrais obtenir la valeur A00010-002.
    Je pensais m'en sortir en faisant une simple incrémentation, mais je n'y arrive pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = A00010-001;
    $var++;
    print $var;  --> donne A00010-001
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = A00010-001;
    $var = $var++;
    print $var;  --> donne A00010-001
    Alors que j'ai trouvé cet exemple sur le net (certes avec des lettres mais le principe est le meme) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $c='zy'; 
    print "\$c=$c<br>";  --> affiche zy
    my $d=++$c; 
    print "\$c=$c \$d=$d<br>";--> affiche zz
    Donc pour passer de A00010-001 à A00010-002, est ce que je suis obligée de découper le code, en récupérant la partie avt le tiret et apres, ajouter +1 à la partie finale et recomposer le code?...
    C'est plutot lourd alors qu'il me semblait que tt pouvait se faire tout seul...

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 124
    Points : 145
    Points
    145
    Par défaut
    Bha j'ai quelque chose mais surement pas sufisant pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $var =~ s/(\d+)$/($1+1)/eg ;
    sa donne :
    A00010-2
    A00010-3
    A00010-4
    A00010-5

    encor à travailler.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    C'est deja ca, merci

    Mais je suis quasiment sure que ce peut se faire par auto incrementation...
    Dans perldoc
    print ++($foo = '99'); # affiche '100'
    print ++($foo = 'a0'); # affiche 'a1'
    print ++($foo = 'Az'); # affiche 'Ba'
    print ++($foo = 'zz'); # affiche 'aaa'

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par linou
    Mais je suis quasiment sure que ce peut se faire par auto incrementation...
    Pas avec le - dedans

    Tu peux cependant faire un split par le "-", une incrémentation automagique sur le champ [-1], et un join avec un "-" ...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 124
    Points : 145
    Points
    145
    Par défaut
    L'incrémentation marcherais si le '-' n'apparaissait pas

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Je reprned un vieux post...

    J'ai bien été obligé d'isoler le 001 seul pr pouvoir incrementer.

    Par contre, si j'ai $tmp = 001; et que je fais ++$tmp, j'obtiens 2 alors que je voudrais 002.

    Comment fair epr q ca reste tjs sur 3 chiifres?

    Idem si j'ai 009, je veux psaser à 010 et non pas a 10

    Merci

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Il n'y a aucun problème si $tmp vaut "001", et non 001.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Oui mais comment faire dans le cas ou j'ai la valeur de la variable qui est "deduite"?
    Par exemple j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($gene =~ m/(.*)(-)([0-9]{3})([a-z]?)(-)([<->*\#])?(.*)/) 
    {
        if ($3 > $max)
       {
          $max = $3;
       }
    }
    Dans ce cas $3 est censé etre égal à quelque chose comme 001 ou 002 ou 003 ou... donc $max aussi.

    Mais si j'ai un $3 = 001 et que $max = $3, comment je peux faire pour incrementer $max sur 3 chiffres? Et donc ne pas obetnir 2 au lieu de 002?

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Tant qu'il s'agit de "chaines", Perl se débrouille, il me semble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $max;
     
    my $gene="abcdef-002-#def";
    if ($gene =~ m/(.*)(-)([0-9]{3})([a-z]?)(-)([<->*\#])?(.*)/)
    {
      $max = $3;
    }
    $max++;
    print "$max\n";
    produit bien "003", chez moi.

    Après, peut être que tu peux encore aider Perl avec un $max="$3"; si chez toi il a du mal à comprendre ce que tu veux faire.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. [AC-2007] Incrémenter un code Item selon l'Item précédent.
    Par shmider dans le forum IHM
    Réponses: 2
    Dernier message: 02/11/2010, 12h37
  2. Incrémentation auto : code lettre+chiffres
    Par Mafalda123 dans le forum Modélisation
    Réponses: 11
    Dernier message: 16/07/2008, 16h33
  3. [WD9]champ auto-incrémente par code
    Par loic20h28 dans le forum WinDev
    Réponses: 4
    Dernier message: 25/02/2008, 20h53
  4. [VBA-E] code pour incrémentation
    Par tarmin dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/02/2007, 15h58
  5. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/09/2003, 15h09

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