Indexer les parenthèses d'une chaine de caractère.
Résolu
Benjamin-BioInfo
-
Benjamin-BioInfo -
Benjamin-BioInfo -
Bonjour à tous.
Dans le cadre d'un projet je souhaiterai traiter des chaines du type:
((((A,B):100,C):98,(D,E):50,F):84,G)
et donc associer chaque parenthèse ouvrante "(" à la parenthèse fermante correspondant ")", le tout en perl.
Mon idée première fut de splitter la chaine, puis de dire:
Si tu vois une "(", alors tu ajoutes un au compteur et compteur= numéro de la parenthèse"("
Si tu vois une ")", alors tu enlèves un au compteur et compteur= numéro de la parenthèse")"
Cependant dés que deux parenthèses se suivent comme ceci: ..)...(... je suis coincé.
Si quelqu'un a une idée, ou pourrait m'orienter vers un lien, ça serait super!
Merci à vous!
Dans le cadre d'un projet je souhaiterai traiter des chaines du type:
((((A,B):100,C):98,(D,E):50,F):84,G)
et donc associer chaque parenthèse ouvrante "(" à la parenthèse fermante correspondant ")", le tout en perl.
Mon idée première fut de splitter la chaine, puis de dire:
Si tu vois une "(", alors tu ajoutes un au compteur et compteur= numéro de la parenthèse"("
Si tu vois une ")", alors tu enlèves un au compteur et compteur= numéro de la parenthèse")"
Cependant dés que deux parenthèses se suivent comme ceci: ..)...(... je suis coincé.
Si quelqu'un a une idée, ou pourrait m'orienter vers un lien, ça serait super!
Merci à vous!
A voir également:
- Indexer les parenthèses d'une chaine de caractère.
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
2 réponses
Salut Benjamin,
Avec le module CPAN Text::Balanced, tu peux faire cela en quelques lignes de code.
cela donne :
Vois la doc du module pour gérer les erreurs de parsing.
Dal
Avec le module CPAN Text::Balanced, tu peux faire cela en quelques lignes de code.
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Text::Balanced qw (extract_bracketed); my $st = "((((A,B):100,C):98,(D,E):50,F):84,G)"; while ($st =~ /\(/g) { my ($extracted, $remainder) = extract_bracketed(substr($st, $-[0]), '('); if (defined($extracted)) { print "extracted: $extracted\n"; } }
cela donne :
extracted: ((((A,B):100,C):98,(D,E):50,F):84,G)
extracted: (((A,B):100,C):98,(D,E):50,F)
extracted: ((A,B):100,C)
extracted: (A,B)
extracted: (D,E)
Vois la doc du module pour gérer les erreurs de parsing.
Dal
Wow... super!!
Merci beaucoup, j'ai bossé dessus tout l'après-midi et j'ai finalement réussi à faire ça en... 50 lignes de codes, 3 tableaux de hash... bref une galère pour un code vraiment pas beau ^^'
En tout cas merci beaucoup pour ton aide, je m'en vais tester ce nouveau code immédiatement!
A plus :)
Merci beaucoup, j'ai bossé dessus tout l'après-midi et j'ai finalement réussi à faire ça en... 50 lignes de codes, 3 tableaux de hash... bref une galère pour un code vraiment pas beau ^^'
En tout cas merci beaucoup pour ton aide, je m'en vais tester ce nouveau code immédiatement!
A plus :)