4 caractères dans une suite de caractère

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : 4 caractères dans une suite de caractère

par ouckileou » 18 avr. 2006, 09:23

Oui je sais je me suis repris juste après :
Edition :
j'avais même pas regardé mais la solution qu'il t'a donné correspond parfaitement à ce que tu demandes... :oops:

par Lorenzo » 18 avr. 2006, 07:43

L'idée de l'expression régulière de Lorenzo n'est pas idiote, tu peux parfaitement faire un masque qui dit :

uniquement les caractères A, G, T ou C
N fois
ben justement c'est exactement ce que mon expression faisait ....

par ouckileou » 11 avr. 2006, 16:03

Tu fais comme tu le sens c'est ton script
Mais c'est plus dure à appliquer pour moi
Si tu as compris mes explications, il n'y a rien de plus à comprendre, tu as juste à recopier son post :lol:
$chaine_ADN = 'ACtTCGTCatgCATACG';
$chaine_ADN = strToUpper($chaine_ADN);
$ADN_valide = preg_match("#^[ACGT]+$#", $chaine_ADN);

if ($ADN_valide == 0) {
   echo "Cette chaîne N'est PAS un code ADN valide";
} else {
      echo "Cette chaîne est un code ADN valide";
}
preg_match() retourne le nombre de fois où le masque pattern a été trouvé. Cela peut aller de 0 (pas de solution) à un 1 car preg_match() s'arrête dès qu'elle a trouvé une première solution.
Pour le moment, je vais le laisser comme ca, et ensuite, quand j'aurias fini ce qui va autour, je verrais si je peux avoir quelque chose de plus logique ;)
Je suis prêt à parier que ça n'arrivera jamais, quand on dit "je ferais mieux plus tard", on n'y revient jamais, quand ça marche on est content et on oublie :lol:

par Gecko » 11 avr. 2006, 15:55

Ah, oui expliqué comme ca, c'est tout de suite plus simple

Mais c'est plus dure à appliquer pour moi

Pour le moment, je vais le laisser comme ca, et ensuite, quand j'aurias fini ce qui va autour, je verrais si je peux avoir quelque chose de plus logique ;)

Merci

par ouckileou » 11 avr. 2006, 15:52

Ouais bof
Effectivement ça marche mais alors c'est vraiment tordu

Si je passe derrière toi et que je vois ça je ne comprendrais pas du tout ce que ça fait
Et même avec un commentaire il me faudra un petit temps de réaction et je me dirais "ce mec réfléchi bizarrement !"

La proposition de Lorenzo était la plus simple et la plus logique pour vérifier le format d'une chaîne de caractères

En définissant le masque qui correspond à tes critères :

Code : Tout sélectionner

^[ACGT]+$
Qui se traduit par : la chaîne doit commencer (^) et finir ($) par A, C, G ou T, caractères qui peuvent être présent 1 ou N fois (+)
=> EXACTEMENT ce que tu veux

Il utilise ensuite une fonction PHP qui utilise les expression régulières et qui vérifier si la chaîne passée en paramètre correspond à ce masque, et te renvoie le résultat

C'est donc plus logique, plus lisible, et sûrement plus rapide même si ça ne se voit pas.

C'est l'occasion de comprendre comment fonctionne les expressions régulières en plus. Tu en auras sûrement besoin un jour, et tu ne pourras pas toujours trouver des parades de ce genre...

Je serais toi je laisserais tomber ta solution un peu tordue pour adopter celle-ci :)
C'est le boulot des regex de valider le format d'une chaîne de caractères

Mais c'est bien d'avoir cogité et d'avoir trouvé une solution ceci dit ;)

par Gecko » 11 avr. 2006, 15:44

Ah d'accord

Ben c'est cool alors

J'ai aussi trouvé par moi même :

Je remplace les lettre A T G C dans la séquence par 'rien'

$ATGC = array('A','T','G','C');
$verifADN = str_replace($ATGC,"",$recherche);

et je regarde la longueur de la chaîne

$lrecherche=strlen($recherche);


SI elle est égale à zéro, c'est que j'ai bien que des A T G et C
Et donc c'est bon ;)

if ($lverifADN=='0')
{
print "Ceci correspond bien à une séquence ADN.";
}
else {
print "Une erreur s'est glissée dans la recheche.<br>";
print "La recherche ne correspond pas à une séquence ADN.<br>";
};

Et ca marche impécable


En faite l'idée de Lorenzo était la même non ?
Mais j'ai pas tout compris à ce qu'il a écrit :oops:

et ce que j'ai fait, est à mon gout plus simple
(et aussi plus facile avec les connaissances que j'ai :D)

En tout cas, merci à vous trois ;)

J'ai réussi à faire ce que je voulais :)

par ouckileou » 11 avr. 2006, 15:03

L'idée de l'expression régulière de Lorenzo n'est pas idiote, tu peux parfaitement faire un masque qui dit :

uniquement les caractères A, G, T ou C
N fois

Ce sera sûrement plus rapide et plus facilement modifiable qu'une fonction perso

Tu peux regarder le rappel ici : http://www.phpfrance.com/forums/voir_sujet-12979.php

Et utiliser ça pour faire tes tests : www.lumadis.be

Edition :
j'avais même pas regardé mais la solution qu'il t'a donné correspond parfaitement à ce que tu demandes... :oops:

par Gecko » 11 avr. 2006, 14:48

En faite, on pourrait lire la chaîne de caractère, 1 caractère apres l'autre

S'il s'agit d'un A ou d'un T ou d'un G ou d'un C, c'est bon on continue, sinon, on arrete et on affiche un message d'erreur


Je pense que c'est possible

Il faudrait juste que je trouve une fonction ou que je créer un script qui li les chaines de caractères une à une
Pour les entrer dans une variable, et comparer cette variable à A, T G ou C

Merci, encore, je vasi réfléchir la dessus ;)

par Gecko » 11 avr. 2006, 14:41

J'ai du mal m'exprimé
parce que d'apres ce que je comprends de vos propositions,
c'est que l'on va vérifier l'existence d'un motif choisi
ce n'est pas cela dont j'ai besoin (même si ca peut m'être tres utile ;) pour autre chose ;))

en faite, je voudrait resteindre l'alphabet à 4 lettres :
A
C
G
T

pour une chaîne de caractère

et que si on trouve une autre lettres, que ca me retroune un message d'erreur ;)

Je vous remercie pour votre participation
Ca me permet d'avoir un debut de piste ;)

(ou alors j'ai pas tout compris :( )

Merci encore ;)

par Lorenzo » 10 avr. 2006, 20:26

majuscules -> strtoupper()

et pour verifier que tu as que des ACGT tu peux utiliser ceci :
preg_match("#^[ACGT]+$#", $stChaine) apres avoir forcé les majuscules

par jpaul » 10 avr. 2006, 19:30

Je ne sais pas si c'est la solution la plus élégante mais tu peux construire un tableau indexé par chacun des caractères de ta chaîne à valider puis vérifier la taille du tableau...

J'ai fait un test ça donne ça :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">

<html>
    <head>
        <title>Essais</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>

    <body>
<?php
reset($_POST);
while (list($key, $val) = each($_POST )) {
	echo "<BR>$key -> $val";
	$$key=$val;
}

if (!isset($_POST['SUITE'])) {
	echo "<FORM action=";
	echo $_SERVER["PHP_SELF"];
	echo " method=\"post\">";
	echo "SUITE ADN : <INPUT TYPE=TEXT NAME=SUITE>";
	echo "</FORM>";
}
else {
	if (strlen($SUITE) != 4) {
		die("<BR>La suite ne fait pas 4  caractères");
	}
	$SUITE=strtoupper($SUITE);
	// On construit un tableau avec chacun des caractères
	unset($TBLCAR);
	for($x=0; $x<strlen($SUITE); $x++) {
		$TBLCAR[substr($SUITE, $x, 1)]++;
	}
//	foreach($TBLCAR as $key => $val) {
//		echo "<BR>kery=".$key." val=".$val;
//	}
	if (count($TBLCAR) != 4) {
		echo "<BR>'".$SUITE."' n'est pas une suite de 4 caractères différents..."; 
	}
	else {
		echo "<BR>'".$SUITE."' OK les 4 caractères sont différents..."; 
	}
}

?>
    </body>
</html> 
J'espère que ça pourra t'aider.

4 caractères dans une suite de caractère

par Gecko » 10 avr. 2006, 17:58

Jaurais besoin de vérifier que dans une suite de caractère, je n'ai que 4 Caractères différents :

AGTC

C'est en faite pour vérifier que la suite de caractère correspond à une séquence ADN, et dire à l'utilisateur concerné qu'il y a une erreur


Mais je ne vois pas du tout comment faire :(

De plus, j'aimerais forcer la séquence à être en majuscule

Mais je ne sais pas non plus coment faire
(il doit y avoir une fonction spécifique, mais je ne la trouve pas :( )


Un exemple pour que ca soit plus clair :

AGKTCTGATCATGCATCGATCGATGCTGATGCA

La 3eme lettre est un K
Donc pas un A OU T OU G OU C

J'aimerais donc faire ensuite afficher un message comme quoi une erreur s'est glissé dans la séquence

De plus, si l'utilisateur me met une séquence de type
agtctatcgctagctagtgcatactctcgt

J'aimerais la forcer en majuscule pour l'entrer dans une base de donnée (pour que tout soit uniforme en faite)

Merci d'avance ;)


EDIT :

POur les majuscules, j'ai trouvé :

strtoupper()

;)