Trouver plusieurs chaîne différentes dans une séquence...

Pinoche29
Invité n'ayant pas de compte PHPfrance

08 mai 2010, 21:44

Bien le bonjour chers amis.

Je viens à vous pour implorer votre aide (lol). En effet, dans le cadre de mes études, j'ai une option informatique où je dois programmer un site avec du css de l'html et du php. (Mais je n'en connais vraiment que les rudiments, donc j'ai beaucoup de mal à comprendre toutes les infos que je trouve sur le net).

Alors je me décide enfin à exposer clairement mon problème, qui sait, quelqu'un pourra peut-être m'aider.

Je travaille sur l'adn, et je voudrais faire un "graphique" (à l'aide de Jpgraph) pour afficher le brin d'adn entré par l'utilisateur sous la forme d'un rectangle plein de couleur claire avec des rectangle de couleur foncée par dessus au niveau de chaque ORF (cadre de lecture sur un brin d'adn).
En fait, pour cela je pense pouvoir me débrouiller mais je vous explique ça pour que vous compreniez mieux mon vrai problème qui est le suivant :

J'ai ma séquence adn qui ressemble à ceci par exemple :

"AUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAU"

et je dois réussir à trouver la position de tous les différents orf dans cette séquence grâce à un code php. (Un orf commençant par "AUG" et finissant par "UAG" mais qui peut avoir n'importe nombre ou type de lettre au milieu).

En comment faire pour que l'ordinateur donne "un nom de variable" à chaque orf qu'il trouve dans la séquence ?

(Je pense qu'il faut que j'utilise les regex mais j'y comprends rien :( ).

Eléphant du PHP | 428 Messages

09 mai 2010, 00:33

Il faut que tu utilises preg_match_all qui te fournira tes brins ADN dans un tableau.

Exemple :
// La prochaine fois que tu poste un tel message, assures toi au préalable de fournir une chaine adn correcte.
// Il manquait en effet l'orf UAG et je me suis tiré les cheveux pendant 1 heure...

$adn = 'AUGCAGAUGCACAGCAGCAUACCAGCAUAGUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACUAGCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAUGCAGAUGCACAGCAGCAUACCAGCAUAG';

// Ceci n'est pas nécessaire mais permet de découper une longue chaine tous les 3 caractères
// Je m'en suis servi pour faire des test
// $string = wordwrap ( $adn , 3 , " " , 1 ); 

preg_match_all('/AUG([\w]+)UAG/iU', $adn, $tableau);

print_r ($tableau);
Comme le print_r l'indique, les donnés sont sauvegardés dans un tableau (array).

Dans mon exemple tu as le résultat du filtrage dans le tableau[0][0] au tableau[0][2]


Bonne prog,

A+ ;)

pinoche29
Invité n'ayant pas de compte PHPfrance

09 mai 2010, 01:33

Oh super merci !! Oui c'est nécessaire que le nombre de lettre entre AUG et UAG soit un multiple de 3 en fait, j'avais oublié de le préciser. Et je suis vraiment désolée pour mon exemple sans UAG, je suis franchement tête en l'air. ^^'

ViPHP
ViPHP | 5462 Messages

09 mai 2010, 02:26

pinoche29 > juste par curiosité, t'es étudiant en quoi ?

Eléphant du PHP | 170 Messages

09 mai 2010, 05:37

Bonjour,
(Je pense qu'il faut que j'utilise les regex mais j'y comprends rien :( ).
http://lumadis.be/regex/tuto_pcre.php

tu ne pourras plus jamais dire ça ... :)

pinoche29
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 21:57

pinoche29 > juste par curiosité, t'es étudiant en quoi ?
Je suis étudiante en biologie/Biochimie. :)

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 22:47

Oh super merci !! Oui c'est nécessaire que le nombre de lettre entre AUG et UAG soit un multiple de 3 en fait, j'avais oublié de le préciser. Et je suis vraiment désolée pour mon exemple sans UAG, je suis franchement tête en l'air. ^^'
comme ca ca devrait allé

Code : Tout sélectionner

AUG(\w{3})+UAG

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:20

Euh... quand je lui demande de m'afficher $tableau il me marque juste "array"... ???

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 17:21

print_r($tableau);

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:26

Bas là il m'affiche "print_r (Array)". lol

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 17:30

Bas là il m'affiche "print_r (Array)". lol
c'est qu'il a rien trouver, essaye ton expression avec ca http://gskinner.com/RegExr/

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:33

AAaaaah je suis sensée faire quoi avec ce truc ? J'y comprends rien. lol

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 17:38

AAaaaah je suis sensée faire quoi avec ce truc ? J'y comprends rien. lol
tu met ta chaine dedans, et ton expression régulière en haut (sans les délimiteurs)

Pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:49

Ca me donne ça :
RegExp: //AUG(\w{3})+UAG/iU/g
pattern: /AUG(\w{3})+UAG/iU
flags: g
1 capturing groups:
group 1: (\w{3})

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 17:50

ouai mais ta tes groupes en bleu ?