begin process at 2012 05 27 19:52:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES

DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :br, récupérer caractères, découper- texte, substr, strlen Niveau :Débutant Date de création :10/11/2009 Date de mise à jour :10/11/2009 18:24:34 Vu :2 599

Auteur : biloubil

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Un débutant pour les débutants...
Petite histoire: en récupérant un texarea provenant d'une base de donnée pour le mettre dans un pdf (avec fpdf) je me suis retrouvé avec un texte sur une seule ligne et avec tout les " br " de visible. j'ai donc cherché à découper le texte pour en extraire  les lignes indépendamment.
je m'en suis bien sortie (puisque ça fonctionne !) et je me suis dit que cela pouvais être utile à d'autre, moi j'ai découpé en fonction des " br " mais ça marchera avec autre chose.....

Source

  • <?php
  • // le texte en question
  • $area1='La psychologie des foules<br />montre à quel point les lois<br />et les institutions exercent peu<br />d action sur leur nature impulsive ';
  • // 0 25 31 60 66 98 104 141
  • $chaine=$area1; // on assigne un variable en vu de textes différents.........
  • $longstring=strlen($chaine);// récupère la longueur de la chaine de caractères
  • echo $chaine.'<br><br>'; // on affiche le texte
  • $Cptage = substr_count ($chaine, '<br />'); // récupère le nombre de <br />
  • $i=1; // on incrémente la variable qui va servir pour la boucle
  • while($i < ($Cptage+2) ) // la variable "$i" bouclera jusqu'à atteindre le nombre de <br /> et " +2 " => parce qu'il y a une lignes avant le 1er <br /> et une après le dernier <br />
  • {
  • $saut[$i]=$pos[$i-1]+6; // un calcul pour " sauter " le <br /> précédent."$pos[$i-1]" et 6 est le nombre de caractères qui compose " <br /> "
  • if ($pos[$i-1]==0){$saut[$i]=0;} // juste pour le démarrage sinon " erreur"
  • $pos[$i]=strpos($chaine,'<br />',$saut[$i]); // on repère le <br /> suivant en reprenant le comptage en tenant compte du " saut " calculé plus haut
  • $jusqua[$i]=$pos[$i]-$saut[$i]; // calcul de la fin de la ligne suivante ; ex : pour la deuxième ligne => position du 2eme "<br />" = 60 moins le saut du 1er "<br />" =31 : donc 29 de " > à < "
  • if ($pos[$i]==""){$jusqua[$i]=$longstring;} // juste pour la dernière ligne, comme on ce repère avec les <br />, si il n'y en à pas à la fin.... on ne pourra pas extraire la dernière ligne...
  • $ligne[$i]=substr($chaine,$saut[$i],$jusqua[$i]); // he ben.. là on découpe la ligne en "sautant" les <br /> jusqu'au <br /> suivant...
  • // Histoire de voir si tout ce passe bien.....
  • echo 'saut'.$i.' : '.$saut[$i].'<br>';
  • echo 'pos'.$i.' : '.$pos[$i].'<br>';
  • echo 'jusqua'.$i.' : '.$jusqua[$i].'<br>';
  • echo 'Ligne'.$i.': '.$ligne[$i].'<br><br>';// et là, on affiche nos lignes ainsi découpées
  • $i++;
  • }
  • ?>
<?php

// le texte en question

$area1='La psychologie des foules<br />montre à quel point les lois<br />et les institutions exercent peu<br />d action sur leur nature impulsive ';
//          0                           25    31                             60    66                                 98    104                               141

$chaine=$area1; // on assigne un variable en vu de textes différents.........

$longstring=strlen($chaine);//  récupère la longueur de la chaine de caractères

echo $chaine.'<br><br>'; // on affiche le texte

$Cptage = substr_count ($chaine, '<br />'); // récupère le nombre de <br />

$i=1; // on incrémente la variable qui va servir pour la boucle

 while($i < ($Cptage+2) ) // la variable "$i" bouclera jusqu'à atteindre le nombre de <br /> et " +2 " => parce qu'il y a une lignes avant le 1er <br /> et une après le dernier <br />
 {
$saut[$i]=$pos[$i-1]+6; //  un calcul pour " sauter " le <br /> précédent."$pos[$i-1]" et  6  est le nombre de caractères qui compose  " <br /> "

if ($pos[$i-1]==0){$saut[$i]=0;} // juste pour le démarrage sinon " erreur"

$pos[$i]=strpos($chaine,'<br />',$saut[$i]); // on repère le <br /> suivant en reprenant le comptage en tenant compte du " saut " calculé plus haut 

$jusqua[$i]=$pos[$i]-$saut[$i];  // calcul de la fin de la ligne suivante ; ex : pour la deuxième ligne => position du 2eme "<br />" = 60 moins le saut du 1er "<br />" =31 : donc 29 de " > à < "

if ($pos[$i]==""){$jusqua[$i]=$longstring;} // juste pour la dernière ligne, comme on ce repère avec les <br />, si il n'y en à pas à la fin.... on ne pourra pas extraire la dernière ligne...

$ligne[$i]=substr($chaine,$saut[$i],$jusqua[$i]); // he ben.. là on découpe la ligne en "sautant" les <br /> jusqu'au <br /> suivant...



// Histoire de voir si tout ce passe bien.....

echo 'saut'.$i.' : '.$saut[$i].'<br>';
echo 'pos'.$i.' : '.$pos[$i].'<br>';
echo 'jusqua'.$i.' : '.$jusqua[$i].'<br>';
echo 'Ligne'.$i.': '.$ligne[$i].'<br><br>';// et là, on affiche nos lignes ainsi découpées

$i++;

 }
?>

 Conclusion

C'est mon premier post, j'espère que ça aidera......................

Je n'ai pas un très haut niveau, alors n'hésitez pas à critiquer, je suis preneur..

Byby


 Historique

10 novembre 2009 18:19:48 :
calage de la numérotation des caractères de texte
10 novembre 2009 18:22:12 :
Problème pour la numérotation des caractères à la ligne 6
10 novembre 2009 18:24:34 :
Encore une correction.......

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

ELIMINER LES FAUTES DE VALIDITÉ W3C COURANTES. par kylekatarnls
SIMPLE ALGORITHME POUR RÉCUPERER UNE CHAINE DE CARACTERE DAN... par JoebarGlut

Commentaires et avis

Commentaire de sheva le 10/11/2009 19:16:55

Euuuh, et si tu essayais la méthode "MultiCell" de FPDF ?

Commentaire de biloubil le 11/11/2009 15:41:58

salut,
Il ne faut pas focaliser sur mon souci avec fpdf, c'est surtout pour montrer, à quelqu'un qui débute, comment découper un texte!

Mais pour Multicell ( que je ne connaissais pas) et fpdf en particulier, je n'est pas trouvé de tuto pour débutant, par exemple l'explication "officiel" ( http://www.fpdf.org/fr/doc/multicell.htm )  n'est pas clair à mon niveau, mais bon je vais m'y pencher, griller un après midi pour tout décortiquer, et je finirais bien par y arriver.
A ce sujet je vais certainement lancer une pétition sur la toile, pour les "oubliés permanents" que sont les débutant (ironie!!).Apparemment, quant on arrive à un certain niveau, on oublis ce qu'on à était......

En tout cas merci Sheva pour "multicell"....

Byby
.

.
.

Commentaire de biboux le 12/11/2009 15:37:02

Salut,
merci pour ce code mais je me trompe si je dis que tu peux faire la même chose avec la fonction explode() ??
Il me semble que la découpe se ferait ainsi :
$tab = explode("<br />", $area1);

Ton tableau contiendra ainsi les morceaux de ta chaine entre les balises de fin de ligne

Bonne journée à tous
Bye

Commentaire de HTMLer le 14/11/2009 16:46:08

OUlalala, BIBOUX a totalement raison, avec explode c'est bien plus facile :)
Meme avec un str_replace, tu remplaces les <br> par des \n ;)

Commentaire de masternico le 16/11/2009 20:22:11

Attention Biboux, il ne faudrait pas enduire d'erreur (ha ha ha) notre cher ami Biloubil.
J'ai effectivement eu le même réflexe que toi pour le coup du explode, sauf qu'avec explode('<br />', ...) on rate les '<br/>' et les '<br>' (et oui, suivant le niveau XHTML choisi, les balises auto-fermantes ne sont pas autorisées à avoir le slash... et aussi, on ne met pas toujours un espace avant le slash).

Je pense qu'il faudrait d'abord normaliser tout ça avant de lancer la moulinette:
$chaine = str_replace(array('<br/>','<br>'),'<br />',$chaine); // comme ça on est sûr que toutes les balises 'br' valent '<br />'
lignes = explode('<br />',$chaine);   // on explose la chaine

et du coup, effectivement, lignes sera un tableau dont chaque ligne est une ligne du textarea (mais sans les balise '<br />')

Commentaire de biloubil le 18/11/2009 18:16:49

merci pour vos interventions.
En cas de html strict, ne faudrait-il pas oublier les <br> sans slash aussi ?

Effectivement je me suis pris gravement le choux, mais j'avais envies de relever le défi avec les moyens du bord..9a ma bien fait cogiter....

j'ai, par contre, beaucoup de difficultés pour compter les lignes d'un textarea provenant de sql, non pas pour l'afficher mais vraiment pour compter le nombre de ligne !!!

pouvez vous m'aider ?

Dans l'attente de vous lire...
.
.

Commentaire de biloubil le 18/11/2009 18:31:04


et hopla, j'ai trouvé tout seul ( trop fort ! ( on ne rit pas !!!!) )

pour ceux que ça intéresse :

$variable1=nl2br($letexte);/* pour afficher les <br />

$variable2=substr_count($letexte,'<br />');/*et pour compter les <br />

Donc html ou xhtml, ça n'a rien à voir je pense..... c'est le <br /> qui s'affiche

je suis très content....(je sais, il m'en faut peu)

Allez, reprenez vos lignes de code et merci pour tout....

A+





 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Prochains anniversaires [ par CSIBern ] Bonjour, Je souhaiterais sortir de ma base SQL la liste des 3 prochaines personnes à avoir leur anniversaire. Problème, ils sont registrés avec leur analyse de fichier texte et tableau dynamique [ par abdinfo6 ] Bonjour, j'ai des fichiers texte nommés par des dates (ex : 20100604) qui sont créés. Ils sont de la forme : date|heure|personne|hobby fichier 2010 requete avec check box [ par casper77610 ] Bonjour à tous, J'insert mon code et je vous explique mon probleme: //tri.php Problème extraction liens [ par Tasslekender ] Bonjour ^^Voilà, je dois réaliser un crawler dans le but de simplifier des sites de presse (dans le cadre d'un projet scolaire) et j'ai un problème da Requete Mysql avec substr [ par dadybond ] En fait je fais une messagerie internet qui ne comporte pas de titre dans les messages et, je voudrais n'afficher qu'un résumé dans la boite puis le m Problème d'affichage de date dans un Ajout [ par vir76 ] Bonjour,Dans ma base de données MySQL, j'ai un champ 'COMMANDE_DATE' avec pour format TIMESTAMP.Pour la visualisation, grâce à un SELECT DATE_FORMAT, affichage d'une date JJ/MM/AAAA dans une recherche [ par vir76 ] Salut tout le monde,J'ai fait la fonction suivante :function datemysql($date){$annee=substr($date,7,4);$mois=substr($date,4,2);$jour=substr($date,0,2) Substr...... [ par BioSs007 ] Alors voilà moi j'utilise &lt;? echo substr("$text1_pl",0,20)."...";; ?&gt; ça amrche impec sauf que comme la variante $text1_pl = "&lt;strong&gt;&lt; fonction date probléme [ par speedylol ] Voici la fonction function DateFrench($dat){$annee=substr($dat, 0, 4);$mois=substr($dat, 5, 2);$jour=substr($dat, 8, 2);$heure=substr($dat, 11, 2);$mi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales