Forum Programmation.perl Comment copier des chaînes de caractère différente

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-1
30
mar.
2018

Bonjour à tous !

Je découvre le perl et j'aimerai pouvoir copier dans un fichier le nom d'isotopes pour les coller dans un autre fichier. Seul problème, ces noms d'isotopes ont un nombre de caractères qui est de 6 maximum ( ex : SN129M) et lorsque le nom de l'isotope n'est pas composé de 6 caractères, les caractères sont remplacés par des espaces (ex : C 13 pour le carbone 13. Noter qu'il y a un espace avant et après le C et un espace après le 3). J'aimerai donc pouvoir identifier dans mon fichiers les chaines de ce type pour ensuite les copier dans un autre fichier.
Connaissez-vous une fonction permettant de faire ça ?

Merci d'avance pour vos réponses et conseils !

  • # regex

    Posté par  . Évalué à 3. Dernière modification le 30 mars 2018 à 20:33.

    Sans le format de départ dans le fichier, c'est un peu compliqué d'être précis (tabulé,avec un séparateur particulier, chaine de caractères ?).
    S'il n'y a pas de délimiteur autre que l' et sachant qu'il peut faire parti du code isotope, il peut y avoir des problèmes (faux négatifs et ou faux positif)

    En considérant le code isotope est alphanumérique en majuscule et avec espace possible :

    #on cherche un motif de 6 caractères exactement pouvant être espace, des lettres en majuscules et des chiffres
    for my $str(("SN129M"," C 13 ","C12","plop coin", "ex : C 14 pour le carbone 14")){
        if($str=~ /([ A-Z0-9]{6})/){
        print "'".$str."' -> isotope : '".$1."'\n";
        }
        else{
            print "'".$str."' -> isotope non trouvé\n";
        }
    }

    rendra

    'SN129M' -> isotope : 'SN129M'
    ' C 13 ' -> isotope : ' C 13 '
    'C12' -> isotope non trouvé
    'plop coin' -> isotope non trouvé
    'ex : C 14 pour le carbone 14' -> isotope : ' C 14 '
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.