Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1781 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparaison de texte

n°1895369
fluminis
Posté le 15-06-2009 à 17:51:17  profilanswer
 

Bonjour,
 
J'ai besoin de l'avis des programmeurs que vous êtes.
 
Contexte : j'ai un site, où les membres peuvent poster puis modifier leurs commentaires.
But du jeu : pouvoir tracer les modifications faites sur un texte afin de voir rapidement ce qui a été modifié.
Langage utilisé : PHP + mySql
 
J'ai trouvé Text_Diff de PEAR.
L'avez vous déjà utilisé ? Je ne comprends pas trop le principe, ni comment l'utiliser. Les exemples donnés sont trop simples : ils ne montrent que comment afficher à l'écran la différence entre deux textes, mais pas comment sauvegarder un patch, ni comment appliquer un patch sur un texte pour revenir à la version précédente.
 
La fonction unix diff, sert à générer un patch que l'on peu ensuite appliquer à un texte pour remonter à la version précédente, non ?
 
Afin de limiter au maximum la taille de ma base de donnée, je comptais stocker : le texte final dans une table pour l'affichage et dans une autre les patchs diff successifs permetant de revenir à la version précédente si besoin.
 
Que pensez vous de ma solution ? Auriez vous des conseils ou des exemples d'utilisation ?
 
Merci d'avance
 
Flu


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
mood
Publicité
Posté le 15-06-2009 à 17:51:17  profilanswer
 

n°1899225
fluminis
Posté le 25-06-2009 à 16:20:31  profilanswer
 

pas d'idée ?
personne n'a jamais fait ce genre de chose en PHP ?
 
Quel est le pendant de Text_Diff pour appliquer un patch sur une chaine ?


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1899241
jonas3
Posté le 25-06-2009 à 17:06:38  profilanswer
 

J'ai déja utilisé Pear pour faire de l'authentification ainsi que des requettes pseudos-préparés mais jamais text_diff :o


---------------
http://petitjonas.blogspot.com/
n°1899281
fluminis
Posté le 25-06-2009 à 20:10:43  profilanswer
 

Domage !
 
Text_Diff a en plus la facheuse tendance de ne pas respecter les standards php5 et leve des erreurs de codage. Donc pas moyen de l'utiliser tel quel si on a mis l'option E_ALL.
 
Il faut modifier les "&new UneClasse" par "new UneClasse" dans tous les fichiers de la librairie Text_Diff.
 
Pour le "patch", j'ai du recoder une fonction maison a partir du format rendu par Text_Diff :
 

Code :
  1. //appel de diff pour obtenir un $patch
  2. function diff($original, $final) {
  3. $diff = new Text_Diff(split("\n",str_replace( "\r\n", "\n",$original)), split("\n",str_replace( "\r\n", "\n",$final)));
  4. $renderer = new Text_Diff_Renderer();
  5. return $renderer->render($diff);
  6. }


 

Code :
  1. //application d'un patch sur un text
  2. function patch($original, $patch) {
  3. $new = array();
  4. $current = 0;
  5. $original_array = explode( "\n", str_replace( "\r\n", "\n", $original ) );
  6. $patch_array    = explode( "\n", $patch );
  7. $countOriginal = count($original_array);
  8. foreach($patch_array as $line ) {
  9.  if (!empty($line)) {
  10.   if ($line[0] == '>') { //add
  11.    $new[] =  substr( $line, 2 );
  12.   } else if (preg_match("/^([0-9]+)(?:,([0-9]+))?(a|d|c)/", $line, $matches)) {
  13.    $l_start = $matches[1] - 1;
  14.    $l_end   = $matches[2] != "" ? $matches[2] - 1 : $l_start;
  15.    $action  = $matches[3];
  16.    for(; $current < $l_start; $current++) {
  17.     $new[] = $original_array[$current];
  18.    }
  19.    if ($action == "d" ) {
  20.     $current = $l_end + 1;
  21.    } else if ($action == "a" ) {
  22.     $new[] = $original_array[$current++];
  23.    } else if ($action == "c" ) {
  24.     $current += $l_end - $l_start + 1;
  25.    }
  26.   }
  27.  }
  28. }
  29. for(; $current < $countOriginal; $current++) {
  30.  $new[] = $original_array[$current];
  31. }
  32. return implode( "\n", $new );
  33. }


 
Mais bon reinventer la roue n'est pas forcement une bonne solution. Si il existait une librairie robuste et testée par un plus grand nombre, ça m'aurait pas deplus.


---------------
http://poemes.iceteapeche.com - http://www.simuland.net

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Comparaison de texte

 

Sujets relatifs
Inserer du texte via vbs[JAVA] String identiques mais differents lors de la comparaison !
Ouverture/lecture dans un fichier texte Access VBA[java]Lecture d'un gros fichier texte
Texte tronquéEnvoyer La Source dans un fichier Texte
Recupérer texte d'une zone de texte, sur une imageCréation dynamique Zone de Texte ACCESS 2007
Comparaison de texteComparaison chaine de texte php
Plus de sujets relatifs à : Comparaison de texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR