CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[fonc] découpe une chaine en lettres

gugus963
gugus963
Niveau 10
23 octobre 2006 à 19:09:00

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.

:merci: d´avance ! :bye:

darth-bane
darth-bane
Niveau 10
23 octobre 2006 à 19:26:01

Une chaîne, c´est un tableau de caractères !

$chaine = ´abcdef´;
echo $chaine[0]; // va t´afficher a
...
echo $chaine[5]; // affiche f

darth-bane
darth-bane
Niveau 10
23 octobre 2006 à 19:46:03

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 :ok:

gugus963
gugus963
Niveau 10
23 octobre 2006 à 21:26:42

Ah oui ? P´tain tu m´apprends quelque chose ! Merci bien ! J´aurais jamais pensé !

:merci:

deepblue
deepblue
Niveau 16
23 octobre 2006 à 21:46:30

C´est d´ailleur avec cette methose qu´il est possible de generer des chaines de caractères de façon aléatoire.

gugus963
gugus963
Niveau 10
23 octobre 2006 à 23:18:43

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 :p) )
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... :)

gugus963
gugus963
Niveau 10
23 octobre 2006 à 23:20:58

Enfin pour la simplifier pas pour l´améliorer.

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 00:31:14

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.

gugus963
gugus963
Niveau 10
24 octobre 2006 à 16:34:21

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 ?

gugus963
gugus963
Niveau 10
24 octobre 2006 à 16:47:28

"vu que je les utilise (bon une fois) dans ma chaîne"
:d) 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...

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 16:51:06

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.

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 16:53:29

do while est un type de boucle.
while en est un autre.
personnellement, j´aurais utilisé une boucle for :ok:

gugus963
gugus963
Niveau 10
24 octobre 2006 à 17:03:42

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.
:d) 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 ! :)

jehuty21
jehuty21
Niveau 10
24 octobre 2006 à 18:02:01

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;
}

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 18:11:31

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.

gugus963
gugus963
Niveau 10
24 octobre 2006 à 18:15:34

Ah, c´est pour ça que ça ne marche pas avec for...

jehuty21
jehuty21
Niveau 10
24 octobre 2006 à 18:18:37

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 :-°

gugus963
gugus963
Niveau 10
24 octobre 2006 à 18:23:16

do while est un type de boucle.
while en est un autre.
personnellement, j´aurais utilisé une boucle for :ok:

:d) 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...

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 18:23:57

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";
}

darth-bane
darth-bane
Niveau 10
24 octobre 2006 à 18:25:05

GuGus963 :d) Pourquoi ne pas utiliser une des fonctions de jehuty21 :question:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment