Bonjour,
Comme le titre l'indique, j'ai fait un script PHP pour lister les différences entre deux fichiers, d'extensions quelconques, et ligne par ligne.
Seulement vous vous en doutez puisque j'ai créer un topic, ça ne marche pas comme je l'aurai souhaité !
Ci dessous mon algo :
Le tableau $tabDiff est ensuite récuppéré et on fait apparaître le résultat dans une vue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 function comparer ($urlFichierSRC, $urlFichierDST) { // -- Compare le contenu du fichier source avec le contenu du fichier destination // -- Renvoie un tableau contenant toutes les différences du fichier destination par rapport au fichier source $tabFichierSRC = file($urlFichierSRC) ; // On stocke le contenu du fichier source dans la tableau tabFichierSRC $tabFichierDST = file($urlFichierDST) ; // On stocke le contenu du fichier destination dans la tableau tabFichierDST $tabDiff = array() ; for ( $i = 0, $j = 0; $i < count($tabFichierSRC) || $j < count($tabFichierDST) ; $i++, $j++ ) { // Tant qu'il y a des lignes à lire dans l'un des deux fichiers if ( isset($tabFichierDST[$j]) && isset($tabFichierSRC[$i]) && $tabFichierDST[$j] != $tabFichierSRC[$i] ) { $inser = rechercher( $tabFichierDST, $j, count($tabFichierDST), $tabFichierSRC[$i] ) ; if ( $inser != 0 ) { // Il s'agit d'une insertion $t = 0 ; while ( $t < $inser ) { if ( $tabFichierDST[$j] != '' ) { $tabDiff[$j] = "Insertion" ; } $t++ ; $j++ ; } } else { // Si la recherche n'a pas trouvé d'élément de SRC à la suite de DST : Il ne s'agit pas d'une insertion $suppr = rechercher( $tabFichierSRC, $i, count($tabFichierSRC), $tabFichierDST[$j] ) ; if ( $suppr != 0 ) { // Il s'agit d'une suppression $t = 0 ; while ( $t < $suppr ) { if ( $tabFichierSRC[$i] != '' ) { $tabDiff[$i] = "Suppression" ; } $t++ ; $i++ ; } } else { // Si la recherche n'a pas trouvé d'élément de DST dans la suite de SRC : Il ne s'agit pas d'une suppression $tabDiff[$j] = "Modification" ; } } } else // Sinon les lignes sont équivalentes $tabDiff[$i] = "Identique" ; } return $tabDiff ; } function rechercher ( $tab, $k, $l, $ligne ) { $cpt = 0 ; for ( $s = $k ; $s < $l ; $s++ ) { if ( $tab[$s] == $ligne ) { return $cpt ; } $cpt++ ; } return 0 ; }
L'algo marche presque bien, mais il y a des erreurs, au niveau algorithmique a priori. Avec des jeux d'essais j'arrive à faire apparaitre facilement des lacunes, certaines insertions sont prises pour des modifications par exemple.
Je galère dessus depuis une bonne dizaine d'heure, et malgré des modifications "censées", l'algorithme corrige certaines erreurs par d'autres....Bref je ne m'en sors pas....
Si qqun a une suggestion, remarque, j'suis preneur !
Partager