Code php pour comparaison de 2 chaines de caractère
camille911
Messages postés3Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention21 mai 2009
-
21 mai 2009 à 13:11
camille911
Messages postés3Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention21 mai 2009
-
21 mai 2009 à 15:55
Bonjour à tous,
Voilà, je suis en train de développer un petit site de comparateur de séquences (c'est de la biologie), et je bute sur beaucoup d'obstacles, notamment celui-ci :
J'ai une chaine de caractere longue (sequence de reference) et une chaine de caractere plus courte (motif). Le problème est que, comme il s'agit de deux chaines d'ADN, il y a des lettres particulieres : par exemple, A, C, T, G. MAIS, il existe quelque chose appelé "Convention IUPAC", qui dit que S peut être égal à C ou à G, ou encore que M est égal à C ou A... (voir le 2ème tableau ici http://www.dna.affrc.go.jp/misc/MPsrch/InfoIUPAC.html).
Du coup, je ne sais pas du tout comment faire un code php qui prenne en compte ces équivalences, et que si je met un motif =STG, je puisse retrouver une correspondance =CTG dans ma séquence de référence !
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 21 mai 2009 à 14:27
Salut,
En utilisant une regex c'est assez simple a faire. Le principe est de générer un motif a partir de la chaîne recherchée epuis d'effectuer un simple preg_match() pour savoir si ça correspond ou non.
camille911
Messages postés3Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention21 mai 2009 21 mai 2009 à 14:43
Salut,
Déjà, merci pour ta réponse !
Il me semblait bien qu'il fallait utiliser regex, cependant je n'ai pas réussi à trouver comment ! je ne veux pas discriminer des caractères, mais dire que certains sont égaux à d'autres (S= C ou G, M= C ou A, X= à n'importe quoi...).
camille911
Messages postés3Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention21 mai 2009 21 mai 2009 à 15:55
ok, alors voilà le code (en entier) que j'ai déjà écrit :
<html>
<link rel= "stylesheet" type="text/css" href="style.css">
<?
$seqref=$_POST['seqref'];$motif=$_POST['motif']; if (strcasecmp($seqref,$motif)<0)
{
echo " Il y a une erreur : votre motif est plus grand que la séquence de référence
";
echo "Il est ",date("H:i:s"),". ";
}
else
{
echo "Voici le résultat de votre comparaison
";
echo "Vous vous connectez à ",date("H:i:s"),", ";
}
{
echo "La taille de votre séquence de référence est de ",strlen($seqref)," acides aminés,";
echo " et la taille de votre motif est de ",strlen($motif)," acides aminés.";
}
if (eregi($motif,$seqref))
{
echo " Il y a une correspondance de votre motif dans la séquence;";
echo " il y a ",substr_count($seqref,$motif)," occurence(s) du motif dans la séquence.";
}
else
{
echo "Il n'y a pas de correspondance de votre motif dans la séquence.";
}
?>
[index.html Retour]</html>
J'ai
utilisé eregi (à l'ancienne) pour indiquer la correspondance entre mon
motif et ma séquence, mais cela ne tient pas compte de la
dégénérescence que j'expliquais :
exemple (rappel : S = C ou G)
sequence = AGCT CSG T
motif = CCG --> Je veux obtenir une correspondance, mais mon code actuel ne m'en donne bien sûr pas
autre exemple (rappel M = C ou A)
sequence = AGC TCSGT
motif = MGC --> Il faut là aussi une correspondance...
Je travaille avec l'alphabet suivant : A, B, C, D, G, H, K, M, N, T, U, R, S, W, V, Y
En sachant qu'il me faut toutes les équivalences suivantes : RR, A ou G ; Y Y, C, T ou U ; M = M, C ou A ; K = K, T, U ou G ; W = W, T, U ou A ; S = S, C ou G ; B = B, C,T, U ou G ; D = D, A, T, U ou G ; H = H, A, T, U, C ; V = V, A, C ou G ; et N = N, A, C, G, T, U