Page 1 sur 1

Transformer un texte en texte versets

Posté : 11 sept. 2009, 14:02
par alec@PHP
Bonjour,

Cela fait un certain temps que je cherche comment faire, mais je ne trouve pas la solution :

Je voudrais dans un texte insérer un numéro avant chaque phrase (un peu comme dans la Bible les versets).

Par exemple :

[1] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. [2] Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. [3] Cras elementum ultrices diam. [4] Maecenas ligula massa, varius a, semper congue, euismod non, mi. [5] Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. [6] Duis semper. [7] Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. [8] Pellentesque congue...

En fait mon texte est plus compliqué que cela mais si j'ai le principe je pense pouvoir adapter.

Merci pour toute aide, si qqun a une idée.

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 14:07
par Dr@ke
Surement par exemple avec la fonction explode() avec les: .

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 14:08
par thehawk
Un code sans que j'ai tester etc ... c'est une base de départ ;)
<?php

$texte  = 'Une Phrase . Deuixi .';
$temps = explode('.' , $texte);
$temps_c = count($temps)-1; // Car ta derniere phrase fini par un point ^^
$r = array();
for($i = 0 ; $i <= $temps_c ; $i++)
	{
		$r[] = '['.$i.'] '.$temps[$i];
	}
echo implode('.' $r);
?>
Bye HAwk

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 14:45
par alec@PHP
Merci beaucoup.

Mon texte contiendra aussi des phrases terminant par ... ! ? ' " ou un retour chariot, mais j'ai l'impression qu'on ne peut pas explode() sur plusieurs caractères différents en une seule fois ?

Par exemple si j'avais ce texte :

[1] Lorem ipsum dolor sit amet, consectetuer adipiscing elit ? [2] Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor ! [3] Cras elementum ultrices diam !

[4] Maecenas ligula massa, varius a, semper congue, euismod non, mi. [5] Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat...

[6] Duis semper. [7] Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim ! [8] Pellentesque congue...

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 14:57
par Calimero
Mon texte contiendra aussi des phrases terminant par ... ! ? ' " ou un retour chariot, mais j'ai l'impression qu'on ne peut pas explode() sur plusieurs caractères différents en une seule fois ?
C'est là que preg_split() entre en jeu, quand explode() montre ses limites :wink:

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 15:23
par alec@PHP
Ok merci je vais essayer de me dépatouiller avec preg_split().

Merci à tous,

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 17:54
par alec@PHP
En fait quand j'utilise preg_split comme ca :
define("MASK", "/[.|?|!|\n]/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot.");
Ca me donne :
Array
(
[0] => Ceci est une phrase
[1] => Ceci est une question
[2] => Ceci est une exclamation
[3] => Ceci est un retour :
[4] => du chariot
[5] =>
)
Ce qui est pas mal, mais si je veux reconstituer mon texte comment le script peut savoir quel ponctuation il lui faut ?

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 18:43
par Calimero
Tu peux y arriver avec l'option PREG_SPLIT_DELIM_CAPTURE et l'utilisation de parenthèses autour de ton masque :
define("MASK", "/([.|?|!|\n])/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot.",null,PREG_SPLIT_DELIM_CAPTURE);

print_r($d);

Code : Tout sélectionner

Array ( [0] => Ceci est une phrase [1] => . [2] => Ceci est une question [3] => ? [4] => Ceci est une exclamation [5] => ! [6] => Ceci est un retour : [7] => [8] => du chariot [9] => . [10] => )

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 18:52
par alec@PHP
Génial !! Merci infiniment !!

Re: Transformer un texte en texte versets

Posté : 11 sept. 2009, 22:26
par alec@PHP
Encore moi ^^

Comment peut-on preg_spliter sur deux délimiteurs dont l'un est compris dans l'autre ?

Je m'explique je dois séparer les 3 phrases suivantes :

Ceci est une phrase avec un point final. Et ceci et une phrase avec une 'citation façon anglaise.' Ceci est une phrase avec un autre point final.

Je cherche donc à splitter sur . et .'
J'ai essayé pleins de trucs mais rien n'y fait.
Une idée ? svp

Re: Transformer un texte en texte versets

Posté : 14 sept. 2009, 12:37
par Calimero
Il va falloir te mettre sérieusement aux expressions régulières ;)
<?php
header('Content-Type: text/plain');

define("MASK", "/([.|?|!|\n]+[']*)/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot. Ceci est une phrase avec un point final. Et ceci et une phrase avec une 'citation façon anglaise.' Ceci est une phrase avec un autre point final.
",null,PREG_SPLIT_DELIM_CAPTURE);