Salut, je recherche une fonction qui découpe une chaîne en lettres !
Un petit exemple :
http://simmstein.be/wall-CxkFanl6-php.htm
J´ai essayé avec explode() en faisant comme ceci :
$array = explode("", "abcdefg");
Mais ça me retourne une erreur.
d´avance ! ![]()
Une chaîne, c´est un tableau de caractères !
$chaine = ´abcdef´;
echo $chaine[0]; // va t´afficher a
...
echo $chaine[5]; // affiche f
Juste un truc en passant, pour ton titre de topic, au lieu de ´[fonc]´, mets le langage que tu utilise ´[php]´. C´est nettement plus parlant ![]()
Ah oui ? P´tain tu m´apprends quelque chose ! Merci bien ! J´aurais jamais pensé !
![]()
C´est d´ailleur avec cette methose qu´il est possible de generer des chaines de caractères de façon aléatoire.
Merci, car grâce à vous, j´ai réussi à créer ma fonction.
En fait, cet après midi en SVT on a appris les composants de l´ADN, et on a fait un pari avec un pote de réussir à créer une fonction qui transforme automatiquement "C" en "G", "A" en "T", etc...
(Cytosine en Guanine... l´ADN fonctionne par pair ou un truc du genre
)
Donc c´est réussi, et je disais que c´est grâce à vous, car je ne savais pas parcourir une chaîne de caractère ! ![]()
Donc voilà, on peut tester ici :
http://goliathletueur.free.fr/scripts/adn_reverse/
Et voici les codes sources :
- Fonction.php
http://simmstein.be/wall-hBUQqtHT-php.htm
- Test.php
http://www.simmstein.be/wall-0N5AI6PZ-php.htm
Le problème est simple :
- J´ai fait pour que ça marche quand on entre "TGAC" et pour que ça marche quand on entre "TgaC" mais, il reste un problème (bon je chipote), et le voici :
http://goliathletueur.free.fr/UPLOAD/fichiers/boris-1161638204-probleme_adn_reverse.jpg
Il doit y avoir une fonction pour rendre une chaîne tout en majuscule non ?
- Et si vous auriez des conseils pour améliorer ma fonction... ![]()
Enfin pour la simplifier pas pour l´améliorer.
strToUpper() => mise en majuscule d´une chaime de caractère.
strToLower() => mise en minuscule d´une chaime de caractère.
Un conseil, suis les tutoriaux PHP du SDZ, car ces 2 fonctions y sont expliquées ainsi que plein d´autres.
Il y´a même à la fin un chapître sur les expressions régulières appelées aussi REGEX qui simplifieraient bien ton programme.
Merci pour ces deux fonctions ! En effet, il me semblait bien les avoir vues, puisque elles sont dans le tuto du SdZ. Oui, j´ai suivi le cours jusqu´au bout ^^ Mais je retiens pas forcément toutes les fonctions qui défilent dedans, en particuler une fonction qu´ils expliquent en 2 lignes ^^
Hmm, et tu vois bien que j´ai lu le chapitre sur les REGEX vu que je les utilise (bon une fois) dans ma chaîne. Et tu me ravives des souvenirs, je crois. Faut utiliser la fonction preg_match non ?
"vu que je les utilise (bon une fois) dans ma chaîne"
Dans ma fonction.
Sinon j´ai corrigé "#[TACGtacg]+#" par "#^[TACGtacg]+$#"
Bon, bon, je m´y mets, je m´y mets, je relis ça
http://www.siteduzero.com/tuto-3-170-1-les-expressions-regulieres-partie-2-2.html ...
Sinon DarthBane, c´est en bidouillant que l´on apprend, enfin selon moi.
Les boucles commençaient tomber dans l´oubli chez moi, en commençant cette fonction, je me suis dit mince comment je vais faire pour transformer toutes les lettres, alors que je ne connais pas le nombre de lettres... Tu me diras c´est tout con, mais avec ça j´ai pensé à une boucle, et en BIDOUILLANT, j´ai réussi à en faire une... Sans jeter une oeil au sdz. Enfin bref tout ça pour dire que OSEF...
Tu as sans doute LU les tutoriaux du SD2, mais il ne faut pas se contenter de LIRE, il faut taper les codes d´exemple, les tester, modifier, retester, adapter, ... C´est le meilleur moyen d´apprendre, de retenir les choses.
Pour ta fonction, moi j´aurais utilisé preg_replace().
preg_match() recherche un motif dans une chaîne.
preg_replace() recherche un motif dans une chaîne et le remplace par un autre motif.
do while est un type de boucle.
while en est un autre.
personnellement, j´aurais utilisé une boucle for ![]()
Tu as sans doute LU les tutoriaux du SD2, mais il ne faut pas se contenter de LIRE, il faut taper les codes d´exemple, les tester, modifier, retester, adapter, ... C´est le meilleur moyen d´apprendre, de retenir les choses.
Je sais, je sais ^^ D´ailleurs au début je ne le faisais pas. C´est maintenant que je teste, je fais plein de petits trucs inutiles, pour mémoriser ! Je suis en train de relire les chapitres du SdZ
En fait j´ai pensé à la boucle While au début, et je me suis dit, tiens, je vais essayer de voir si do{}while; marche, car je n´en avais jamais entendu parler en php, j´avais juste vu ça en C, donc j´ai essayé, ça a marché, et j´ai gardé do while... Mais tu as raison la boucle for est bien plus pratique, d´ailleurs, je vais refaire avec for pour mémoriser ![]()
Et pour la technique avec la fonction preg_replace, je suis en train de regarder justement
En gros, merci pour tous tes conseils ! ![]()
Utiliser $str[0] ou $str{0}, c´est moche.
Et n´en déplaise à certain, les chaînes de caractères ne sont pas de vrais array ( la preuve, une chaîne ne passe pas dans un foreach() )
Ta fonction, elle est moche, et vraiment mal faites.
Si tu es sous PHP 4:
function get_adn($str) {
if(!preg_match(´`^[ACGT]+$`´, ($str = strtoupper($str))))
trigger_error(´Format incorrect´, E_USER_ERROR);
$return = ´Base: ´.$str.´<br />Conversion: ´;
$conv = array(´A´ => ´T´, ´C´ => ´G´, ´G´ => ´C´, ´T´ => ´A´);
$str = explode(´|´, rtrim(chunk_split($str, 1, ´|´), ´|´));
foreach($str as $val)
$return .= $conv[$val];
return $return;
}
Si tu es sous PHP 5
function get_adn($str) {
if(!preg_match(´`^[ACGT]+$`´, ($str = strtoupper($str))))
trigger_error(´Format incorrect´, E_USER_ERROR);
$return = ´Base: ´.$str.´<br />Conversion: ´;
$conv = array(´A´ => ´T´, ´C´ => ´G´, ´G´ => ´C´, ´T´ => ´A´);
$str = str_split($str);
foreach($str as $val)
$return .= $conv[$val];
return $return;
}
Désolé de te décevoir, mais une chaîne de caractères est bien un tableau de caractères.
Que celà ne passe pas dans un foreach() n´est pas une preuve.
Ah, c´est pour ça que ça ne marche pas avec for...
J´ai pas dit que c´était pas un tableau de caractère, j´ai dit que ca n´était pas un array ( fait donc un var_dump() si tu en doutes :p )
Et de toute façon, la question n´est pas vraiment la :-°
do while est un type de boucle.
while en est un autre.
personnellement, j´aurais utilisé une boucle for
Donc je fais comment avec la boucle for, ça me renvoie cette erreur "Notice: Uninitialized string offset: 4 in d:\mes
documents\sites\tests\adn_test_fonction\fonction.p
hp on line 12"
Et pas besoin de me rabaisser et de m´engueuler à moitié car je code mal et que je suis nul en php, je n´ai aucune prétention...
On peut utiliser le transtypage pour utiliser une chaine de caractères avec foreach() :ok
$maVariable = "Super ! J´apprends plein de chose en PHP !" ;
$tableau = (array)$maVariable;
$resultat = ´´;
foreach($tableau as $val)
{
echo $tableau[$val] . "\n";
}
GuGus963
Pourquoi ne pas utiliser une des fonctions de jehuty21 ![]()