Page 1 sur 1

chaine de caracteres, extraire juste une ligne

Posté : 05 mai 2015, 13:37
par jeromedusud
bonjour ici !

j'ai installé un forum phpbb3 et je joue avec le code.
je souhaite extraire des lignes depuis un message du forum, j'ai donc fait une requete qui me donne par exemple :

Code : Tout sélectionner

$data =" presentation blablablabla voiture : ferrari turbo puissance : 34 cv poids : 1200 kg commentaire : elle est chère";
(je détaille pas, mais j'ai trouvé comment retrouver les sauts de lignes comme dans le message sur forum)

j'aimerai extraire uniquement : voiture : ferrari turbo
or je fais :

Code : Tout sélectionner

echo strpbrk($data, 'voiture :');
il ne va pas s'arrêter, il va me copier tout le texte qui suivra :
voiture : ferrari turbo
puissance : 34 cv
poids : 1200 kg
commentaire : elle est chère


comment lui dire de ne copier que jusqu'au saut de ligne

par avance, merci

Re: chaine de caracteres, extraire juste une ligne

Posté : 05 mai 2015, 14:18
par xTG
Tu peux conserver ce code et rajouter explode sur le caractère de retour à la ligne.
Tu obtiendras un tableau de ligne, tu t'intéresses à la première. ;)

Re: chaine de caracteres, extraire juste une ligne

Posté : 05 mai 2015, 17:48
par jeromedusud
salut xTG

je récapitule : j'affiche ca :
NOM DU JEU : PROJECT CARS
VOLANT / MANETTE / CLAVIER : volant G27
AIDE A LA CONDUITE (OUI/NON) : non
FREIN ABS (OUI/NON) : non
CONTRÔLE MOTRICITÉ (OUI/NON) : non


et je voudrais ca :
NOM DU JEU : PROJECT CARS

voila mon bout de code :

Code : Tout sélectionner

$details = $data2['post_text']; $details2 = utf8_encode($details); $details3 = nl2br($details2); $adresse = $details3; $arobase = "NOM DU JEU :"; $total = strstr($adresse,$arobase) . "<br />";
qui permet d'écrire le message avec les bons sauts de ligne et/ou les espaces,
donc j'ai utilisé explode :

Code : Tout sélectionner

$details = $data2['post_text']; $details2 = utf8_encode($details); $details3 = nl2br($details2); $adresse = $details3; $arobase = "NOM DU JEU :"; $total = strstr($adresse,$arobase) . "<br />"; $pieces = explode(" ", $total); echo $pieces;
il me mets : Array

?? merci pour l'aide :D

Re: chaine de caracteres, extraire juste une ligne

Posté : 05 mai 2015, 18:01
par tof73
echo $pieces[0];

Re: chaine de caracteres, extraire juste une ligne

Posté : 05 mai 2015, 18:51
par jeromedusud
merci mais cela ne fonctionne pas

je récapitule : j'affiche ca :
NOM DU JEU : PROJECT CARS
VOLANT / MANETTE / CLAVIER : volant G27
AIDE A LA CONDUITE (OUI/NON) : non
si je fais echo $pieces[0]; il m'affiche PROJECT


et je souhaite :
NOM DU JEU : PROJECT CARS

si je fais echo $pieces[4]; il m'affiche PROJECT
si je fais echo $pieces[5]; il m'affiche CARS

sachant que j'ai des noms parfois simple, parfois composés, je ne sais pas combien c'est aléatoire
donc il me faut bien le saut de ligne, pas une detection d'espace ^^

c'est compliqué ^^

Re: chaine de caracteres, extraire juste une ligne

Posté : 06 mai 2015, 15:45
par Saian
La particularité du retour à la ligne est qu'il peut avoir plusieurs façon d'être encodé : \n, \r, \r\n

En reprenant ton premier code ça donnerait :
echo substr(strpbrk($data, 'voiture :'), 0, strpos(strpbrk($data, 'voiture :'), "\n"));
Testes les différents types de retour à la ligne jusqu'à obtenir celui qui fonctionne.

A noter les " sont important, si tu mets '\n' le \n ne sera pas interprété comme un retour à la ligne.

PS l'idée de xTG est bonne aussi. Après ton strpbrk tu explode sur le retour à la ligne et tu prends la première ligne. Faut juste trouver le bon retour à la ligne.

Re: chaine de caracteres, extraire juste une ligne

Posté : 06 mai 2015, 15:58
par jeromedusud
Bonjour Saian et merci pour ton aide aussi !
je vais tester ton code,
ce qui est embetant, c'est que la chaine en question, c'est le forum phpbb3 qui la fait, via un post dans le forum, je récupère le message.
Donc dans mysql, il y a des espaces, je ne sais pas comment le système fait pour reconnaitre les espaces et les sauts de ligne,
la commande

Code : Tout sélectionner

$details3 = nl2br($details2);
y arrive bien pourtant...
bon j'essaye et je vous tiens au courant :wink:

Re: chaine de caracteres, extraire juste une ligne

Posté : 06 mai 2015, 17:28
par jeromedusud
bon j'ai fait des tas d'essais, ca ne marche pas, il me détecte que la 1ere ligne

echo substr(strpbrk($data, 'voiture :'), 0, strpos(strpbrk($data, 'voiture :'), "\n"));

si je change ce chiffre, ca me décale les caractères, donc vers 26 j'ai la bonne ligne,
mais si un message est différent, ca déplace les caractères

tanpis, merci pour l'aide, je laisse tomber, trop compliqué :?

Re: [RESOLU] chaine de caracteres, extraire juste une ligne

Posté : 06 mai 2015, 17:33
par Saian
Mais non ça n'a rien de compliqué. ;)
$data = '
presentation blablablabla
voiture : ferrari turbo
puissance : 34 cv
poids : 1200 kg
commentaire : elle est chère'; 

$data = substr($data, strpos($data, 'voiture :'));
echo $data = substr($data, 0, strpos($data, "\n"));