IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Extraire des données d'un fichier


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Extraire des données d'un fichier
    Bonjour,

    Je me permets de venir vers vous car je n'arrive pas à extraire des données via php.

    Je souhaite extraire les données d'un fichier m3u qui ce présente comme ceci.

    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
    #EXTM3U
    #EXTINF:-1 tvg-id="" tvg-name="✔   GENERALISTE" tvg-logo="" group-title="France",✔   GENERALISTE
    http://test/2764.ts
    #EXTINF:-1 tvg-id="TF1.fr" tvg-name="TF1" tvg-logo="./logo/TF1%20HD.png" group-title="France",TF1
    http://test/2118.ts
    #EXTINF:-1 tvg-id="TF1.fr" tvg-name="TF1 HD" tvg-logo="./logo/TF1%20HD.png" group-title="France",TF1 HD
    http://test/2103.ts
    #EXTINF:-1 tvg-id="France2.fr" tvg-name="FRANCE 2" tvg-logo="./logo/France%202%20HD.png" group-title="France",FRANCE 2
    http://test/2311.ts
    #EXTINF:-1 tvg-id="France2.fr" tvg-name="FRANCE 2 HD" tvg-logo="./logo/France%202%20HD.png" group-title="France",FRANCE 2 HD
    http://test/9954.ts
    #EXTINF:-1 tvg-id="France3.fr" tvg-name="FRANCE 3" tvg-logo="./logo/France%203%20HD.png" group-title="France",FRANCE 3
    http://test/9956.ts
    #EXTINF:-1 tvg-id="France3.fr" tvg-name="FRANCE 3 HD" tvg-logo="./logo/France%203%20HD.png" group-title="France",FRANCE 3 HD
    http://test/2172.ts
    #EXTINF:-1 tvg-id="France4.fr" tvg-name="FRANCE 4" tvg-logo="./logo/France%204%20HD.png" group-title="France",FRANCE 4
    http://test/11336.ts
    #EXTINF:-1 tvg-id="France4.fr" tvg-name="FRANCE 4 HD" tvg-logo="./logo/France%204%20HD.png" group-title="France",FRANCE 4 HD
    http://test/2171.ts
    #EXTINF:-1 tvg-id="France5.fr" tvg-name="FRANCE 5" tvg-logo="./logo/France%205%20HD.png" group-title="France",FRANCE 5
    http://test/9958.ts
    #EXTINF:-1 tvg-id="France5.fr" tvg-name="FRANCE 5 HD" tvg-logo="./logo/France%205%20HD.png" group-title="France",FRANCE 5 HD
    http://test/2170.ts
    #EXTINF:-1 tvg-id="FranceO.fr" tvg-name="FRANCE Ô" tvg-logo="./logo/FranceO.png" group-title="France",FRANCE Ô
    http://test/9672.ts
    #EXTINF:-1 tvg-id="FranceO.fr" tvg-name="FRANCE Ô HD" tvg-logo="./logo/FranceO.png" group-title="France",FRANCE Ô HD
    http://test/11433.ts
    #EXTINF:-1 tvg-id="M6.fr" tvg-name="M6" tvg-logo="./logo/M6HD.png" group-title="France",M6
    http://test/9959.ts
    #EXTINF:-1 tvg-id="M6.fr" tvg-name="M6 HD" tvg-logo="./logo/M6HD.png" group-title="France",M6 HD
    Je souhaite récupérer les données qui ce trouve dans group-title et ce qui ce trouve après la virgule.

    Pour au final avoir ceci

    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
    France ✔   GENERALISTE
    France TF1
    France TF1 HD
    France FRANCE 2
    France FRANCE 2 HD
    France FRANCE 3
    France FRANCE 3 HD
    France FRANCE 4
    France FRANCE 4 HD
    France FRANCE 5
    France FRANCE 5 HD
    France FRANCE Ô
    France FRANCE Ô HD
    France M6
    France M6 HD
    Je souhaite également que le fichier php complet fonctionne comme ceci.

    1 - renommer le fichier listenew.txt en listeold.txt

    2 - aller chercher le fichier de la nouvelle liste sur un serveur. j'ai un script .sh qui vas le chercher mais je ne sais pas s'il est possible de le faire via php voici le script en .sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    USERNAME="login";
    PASSWORD="pass";
    bouquet="listnews";
    directory="/d/liste/listejef.sh";
    url="http://monserveur.com/get.php?username=$USERNAME&password=$PASSWORD&type=m3u_plus";
    rm /d/liste/Listetv/"$bouquet".m3u;
    wget -O /d/liste/Listetv/"$bouquet".m3u $url;
    3 - extraire les données comme demandé plus haut et créer le fichier listenew.txt

    4 - exectuer le script suivant qui vas me permetre de comparer les deux fichiers et créer ma liste avec les ajouts et les retraits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
        error_reporting(E_ALL|E_STRICT);
     
        include('filediff.classjef.php');
     
        $fd = new filediff();
     
        $fd->set_files('listenews.txt', 'listeold.txt');
     
        $fd->execute('liste.php');
     
        $fd->display();
     
    ?>
    Je vous remercie d'avance car cela fait 1 mois que je suis bloqué la dessus sans y arriver.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En un mois tu as du réussir à faire des choses dans tout ca quand même non ?
    Quel point particulier te bloque encore ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Oui bien sûr j'avais fait tout le script en bat bien pour les anciens fichier m3u mais comme les nouveaux on changer de structure je n'arrive pas à aller chercher les infos qu'il me faut.

    Donc j'aimerai essayer en php mais là aussi je coince, j'ai modifier des scripts que j'avais trouvé. Encore une fois comme les m3u on changer de structure je n'y arrive j'ai juste le dernier caractère après la dernière ,

    Merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Montre nous ce que tu as déjà écrit en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    En php je n'ai écris que les scripts pour faire la liste à partir des deux fichiers .txt et les colonnes ce mettes en rouge pour les retrait et en vert pour les ajouts.

    Pour ce qui est de ma demande je n'ai rien puisque je faisais tout en batch avant mais ce n'est pas pratique car il faut toujours un pc l'avantage du php comme je le voie c'est la possibilité d'exécuter le tout depuis mon site.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En un mois tu n'as pas écrit une ligne de PHP, effectivement tu es bloqué bloqué.

    Pour la lecture du m3u, j'utiliserais une expression regulière avec preg_match_all().
    Pour la recuperation de la liste un simple file_get_contents() suffit.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Merci pour l'info mais sincèrement pour moi c'est un peut chinois 😕 En php j'y connais pas grand chose sinon que la base de la base 😳

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    on a bien compris que tu voulais qu'on fasse le travail à ta place...
    Ca ne va pas être possible.


  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Merci pour cette remarque, mais je ne cherche pas à ce qu'ont fasse le travail à ma place.
    J'ai juste spécifié que c'était chinois car je n'y connais rien en regex.
    Je suis occupé de me documenter sur le sujet.

    Merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bon.
    Je suis d'accord avec toi : les regex, c'est pas évident (j'ai aussi beaucoup galéré... et appris des autres : on a de grands spécialistes sur DVP !) !

    Pour le coup, ça ne prend que quelques lignes... et à peine 5 minutes (le temps de l'écrire, quoi ) :
    et comme je suis de bonne humeur, je te mets aussi des explications.

    Code php : 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
    <?php
    $file = 'texte.txt'; // URL du fichier à parser
     
    $content = file_get_contents( $file ); // on lit tout le fichier dans une chaîne
     
    $pattern = '#group-title="([^"]*)",([^\n]*)\n#Ui'; // regex : on va récupérer séparément le Contenu de group-title="...." et le contenu suivant (sans la virgule)
     
    $result = preg_match_all( $pattern, $content, $matches ); // les résultats seront enregistrés dans $matches
     
    if( $result ) // ok, on a des résultats
    {
    	echo 'Contenu de group-title : <br />';
    	var_dump( $matches[1] ); // [1] car correspond à la 1ère parenthèse de la regex
    	echo 'Contenu suivant (sans la virgule) : <br />';
    	var_dump( $matches[2] ); // [2] car correspond à la 2ème parenthèse de la regex
    } else {
    	echo 'Aucun résultat';
    }
    ?>
    On peut formatter le résultat, pour obtenir ce que tu veux :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if( $result )
    {
    	$result_formatte = array();
    	foreach( $matches[1] as $i => $val )
    	{
    		$result_formatte[] = $matches[1][$i].' '.$matches[2][$i];
    	}
    	echo 'Contenu formatté : <br />';
    	var_dump( $result_formatte );
    }

    Pour tester une regex en ligne :


    Pour le fun, on y arrive aussi comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $pattern = '#group-title="([^"]*",[^\n]*)\n#Ui'; // une seule parenthèse : tout sera dans $matches[1], y compris ",
     
    $result = preg_match_all( $pattern, $content, $matches );
    if( $result )
    {
    	$func = function($val) { return str_replace('",',' ',$val); }; // on remplace ", par un espace
    	$result_formatte = array_map($func, $matches[1]);
    	echo 'Contenu formatté : <br />';
    	var_dump( $result_formatte );
    }



    Alors : "Merci" qui ?


    Pour info, ma femme est Japonaise.
    Mais..... ça n'aide vraiment pas pour le chinois !
    Dernière modification par Invité ; 15/08/2017 à 17h20.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Merci Jacky et Mich.... euh jreaux62 😁

  12. #12
    Invité
    Invité(e)
    Par défaut
    En fait, c'est Jacquie et Mich.... euh... enfin...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Ah d'accord on voie les connaisseurs 😂

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    @jreaux62

    Je réussi à mettre en pratique ce que tu ma donné, mais le résultat me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(7033) { [0]=> string(25) "France ✔ GENERALISTE " [1]=> string(11) "France TF1 " [2]=> string(14) "France TF1 HD " [3]=> string(16) "France FRANCE 2 " [4]=> string(19) "France FRANCE 2 HD " [5]=> string(16) "France FRANCE 3 " [6]=> string(19) "France FRANCE 3 HD " [7]=> string(16) "France FRANCE 4 " [8]=> string(19) "France FRANCE 4 HD " [9]=> string(16) "France FRANCE 5 " [10]=> string(19) "France FRANCE 5 HD " [11]=> string(17) "France FRANCE Ô " [12]=> string(20) "France FRANCE Ô HD " [13]=> string(10) "France M6 " [14]=> string(13) "France M6 HD "
    Merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    De rien.
    C'est bien ce que tu voulais.

    "PHP array"

    Y'a plus qu'à... traiter les données comme tu le souhaites.
    Les copier dans un fichier, par exemple.

    "PHP lire écrire dans un fichier"



    Je ne vais pas tout faire : tu vas t'ennuyer !....

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Je te remercie je me demandais juste si il été normale d'avoir le information array et string a chaque fois.

    Merci plus qu' à tout mettre en tableau et copier dans un fichier .txt

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    J'avance doucement mais surement

    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
    <?php
    // Je supprime et je renomme mes fichiers
     
    if (!file_exists ("IPTVOLD.txt")); // Je vérifie si IPTVOLD existe
    {
    	unlink("IPTVOLD.txt"); // Si il existe je le supprime 
    }
    rename("IPTVNEWS.txt","IPTVOLD.txt"); // Et je renomme IPTVNEWS en IPTVOLD
     
    // Traitement de la liste m3U (Merci jreaux62) 
     
    $file = 'IPTVDIAMOND-OTT.m3u'; // URL du fichier à parser
     
    $content = file_get_contents( $file ); // on lit tout le fichier dans une chaîne
     
    $pattern = '#group-title="([^"]*)",([^\n]*)\n#Ui'; // regex : on va récupérer séparément le Contenu de group-title="...." et le contenu suivant (sans la virgule)
     
    $result = preg_match_all( $pattern, $content, $matches ); // les résultats seront enregistrés dans $matches
     
    if( $result )
    {
    	$result_formatte = array();
    	foreach( $matches[1] as $i => $val )
    	{
    		$result_formatte[] = $matches[1][$i].' - '.$matches[2][$i];
    	}
    	//echo 'Contenu formatté : <br />';
    	//var_dump( $result_formatte );
    	echo implode($result_formatte, '<br>'); // Pour afficher la liste sous forme d'un beau tableau
    }
     
     
    ?>
    Pour écrire dans un fichier texte je pensais à cela mais visiblement le script ne veut pas fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $IPTVNEWS = fopen('IPTVNEWS.txt','w');
    fseek($IPTVNEWS, 0); // On remet le curseur au début du fichier
    fputs($IPTVNEWS, $result_formatte); // On écrit le nouveau fichier
    fclose($IPTVNEWS);
    Il me crée le fichier IPTVNEWS mais il ne m'écrit rien dedans pourtant avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo implode($result_formatte, '<br>');
    j'ai vraiment l'affichage voulue.



    Je me répond à moi même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $IPTVNEWS = fopen('IPTVNEWS.txt','w');
    fseek($IPTVNEWS, 0); // On remet le curseur au début du fichier
    fputs($IPTVNEWS, implode(PHP_EOL, $result_formatte) . PHP_EOL); // On écrit le nouveau fichier
    fclose($IPTVNEWS);

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Merci j'y suis arrivé

    J'aimerai pousser un peut la liste en y ajoutant l'url des images à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tvg-logo="./logo/TF1%20HD.png"
    J'ai pensais à ceci comme début mais encore une fois je bloque quand il s'agit de créer le tableau.

    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
    $file = 'IPTVDIAMOND-OTT.m3u'; // URL du fichier à parser
     
    $content = file_get_contents( $file ); // on lit tout le fichier dans une chaîne
     
    $pattern = '#group-title="([^"]*)",([^\n]*)\n#Ui'; // regex : on va récupérer séparément le Contenu de group-title="...." et le contenu suivant (sans la virgule)
    $picture = '#tvg-logo="([^"]*)"';
     
    $result = preg_match_all( $pattern, $content, $matches ); // les résultats seront enregistrés dans $matches
    $resultp = preg_match_all ($picture, $content, $pics);
     
    if( $result )
    {
    	$result_formatte = array();
    	foreach( $matches[1] as $i => $val )
    	{
    		$result_formatte[] = $matches[1][$i].' - '.$matches[2][$i];
    	}
    	//echo 'Contenu formatté : <br />';
    	//var_dump( $result_formatte );
    	//echo implode($result_formatte, '<br>'); // Pour afficher la liste sous forme d'un beau tableau
    }
    En résultat finale je souhaite donc

    France TF1 | ./logo/TF1%20HD.png

    merci d'avance

  19. #19
    Invité
    Invité(e)
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $pattern = '#tvg-logo="([^"]*)" group-title="([^"]*)",([^\r\n]*)\r\n#Ui'; 
    // matches[1] : contenu de tvg-logo (URL image)
    // matches[2] : contenu de group-title (URL image)
    // matches[3] : contenu qui suit (fin de ligne)
     
    $result = preg_match_all( $pattern, $content, $matches ); // les résultats seront enregistrés dans $matches
     
    if( $result )
    {
    	$result_formatte = array();
    	foreach( $matches[1] as $i => $val )
    	{
    		$result_formatte[] = $matches[2][$i].' - '.$matches[3][$i].' | '.$matches[1][$i]; // de la forme : ((group-title) - (suite) | (URL-image)
    	}
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $fp = fopen('data.txt', 'w');
    	foreach( $result_formatte as $ligne )
    	{
    		fwrite($fp, $ligne."\n");
    	}
    fclose($fp);
    ?>

    Citation Envoyé par jreaux62 Voir le message
    ...on a bien compris que tu voulais qu'on fasse le travail à ta place...
    Comme quoi, j'avais raison...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Je ne cherche pas a ce que l'on fasse le travail à ma place, d'ailleurs j'ai cherché de mon coté.

    Voici d'ailleurs le script qui permets de faire ma liste avec le surlignage

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    <!DOCTYPE html>
     <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="description" content="">
            <meta name="viewport" content="width=device-width, initial-scale=1">
     
            <link rel="profile" href="http://gmpg.org/xfn/11" />
     </head> 
    <?php
    	define ('FD_LINE_NORMAL', 1);
    	define ('FD_LINE_ADDED', 2);
    	define ('FD_LINE_DELETED', 3);
    	define ('FD_INLINE_NORMAL', 4);
    	define ('FD_INLINE_ADDED', 5);
    	define ('FD_INLINE_DELETED', 6);
     
    	class filediff {
    		private $files = array();
    		private $line_format = array();
    		private $header;
    		private $footer;
     
    		private $uid;
    		public function __construct() {
    			$this->files['new'] = array();
    			$this->files['old'] = array();
    			$this->files['res'] = array();
     
    			$this->uid = md5(microtime());
     
    			$this->set_line_format('<tr><td>{line:'. $this->uid .'}</td><td>{value:'. $this->uid .'}</td></tr>', FD_LINE_NORMAL);
    			$this->set_line_format('<tr style="background-color:#99ffaa;"><td>{line:'. $this->uid .'}</td><td>{value:'. $this->uid .'}</td></tr>', FD_LINE_ADDED);
    			$this->set_line_format('<tr style="background-color:#ff9999;"><td>{line:'. $this->uid .'}</td><td>{value:'. $this->uid .'}</td></tr>', FD_LINE_DELETED);
    			$this->set_line_format('<span>{value:'. $this->uid .'}</span>' , FD_INLINE_NORMAL);
    			$this->set_line_format('<span style="background-color:#44ff55;">{value:'. $this->uid .'}</span>', FD_INLINE_ADDED);
    			$this->set_line_format('<span style="background-color:#ff6666;">{value:'. $this->uid .'}</span>', FD_INLINE_DELETED);
     
    			$this->set_header('<table>');
    			$this->set_footer('</table>');
    		}
    		public function set_files($new, $old)
    		{
    			if (! file_exists($new) )
    			{
    				trigger_error('Le fichier '.$new.' n\'existe pas');
    			}
    			elseif (! file_exists($old) )
    			{
    				trigger_error('Le fichier '.$old.' n\'existe pas');			
    			}
    			else
    			{
    				$this->files['new'] = array(
    					'name' => $new,
    					'content' => file($new)
    				);
    				$this->files['old'] = array(
    					'name' => $new,
    					'content' => file($old)
    				);
    				$this->files['res']['content'] = array();
    			}
    		}
    		public function set_destination($res)
    		{
    			$this->files['res']['name'][$res];
    		}
    		public function set_line_format($format, $type)
    		{
    			switch ($type)
    			{
    				case FD_LINE_NORMAL:
    				case FD_LINE_ADDED:
    				case FD_LINE_DELETED:
    				case FD_INLINE_NORMAL:
    				case FD_INLINE_ADDED:
    				case FD_INLINE_DELETED:
    					$this->line_format[$type] = str_replace(
    						array('{value}', '{line}'),
    						array('{value:'. $this->uid .'}','{line:'. $this->uid .'}'),
    						$format
    					);
    					break;
    				default:
    					echo 'error: set_line_format';
    					break;						
    			}
    		}
    		public function set_header($header) { $this->header = $header; }
    		public function set_footer($footer) { $this->footer = $footer; }
     
    		public function display()
    		{
    			echo $this->header;
    			echo implode("\n", $this->files['res']['content']);
    			echo $this->footer;
    		}
    		public function execute($dest = null)
    		{
    			// On récupère le tableau des ajouts
    			$adds = array_diff($this->files['new']['content'], $this->files['old']['content']);
    			// On récupère le tableau des suppressions
    			$dels = array_diff($this->files['old']['content'], $this->files['new']['content']);
    			$i = 0;
    			// Tant que le nouveau fichier n'a pas été parcourru entièrement
    			foreach($this->files['new']['content'] as $k => $v)
    			{
    				// Si la ligne est présente dans le tableau des suppressions
    				if ( isset($dels[$i]) )
    				{
    					// On vérifie si c'est une modification inline
    					if (isset($adds[$k])) {
    						$res = $this->execute_inline( $dels[$i], $adds[$k], FD_INLINE_DELETED, FD_INLINE_NORMAL, $k);
    					}
    					else {
    						$res = $this->replace($this->line_format[FD_INLINE_DELETED], $dels[$i], $k);
    					}
    					$this->push_line($res,$k, FD_LINE_DELETED);					
    					$i++;					
    				}
    				// Sinon si c'est un ajout
    				if ( isset($adds[$k]) )
    				{
    					// On vérifie si c'est une modification inline
    					if ( isset($dels[$i-1]) ) {
    						$res = $this->execute_inline( $adds[$k], $dels[$i-1], FD_INLINE_ADDED, FD_INLINE_NORMAL, $k);			
    					}
    					else {
    						$res = $this->replace($this->line_format[FD_INLINE_ADDED], $adds[$k], $k);
    					}				
    					$this->push_line($res,$k, FD_LINE_ADDED);										
    				}
    				else
    				{
    					$v = $this->replace($this->line_format[FD_INLINE_NORMAL], $v, $k);
    					$this->push_line($v,$k, FD_LINE_NORMAL);
    					$i++;
    				}				
    			}
    			if (isset($dest)) {
    				$this->save_file($dest);
    			}
    			elseif (isset($this->files['res']['name'])) {
    				$this->save_file($this->files['res']['name']);
    			}
    		}
    		private function save_file($dest)
    		{
    			file_put_contents(
    				$dest,
    				array_merge(
    					(array)$this->header,
    					$this->files['res']['content'],
    					(array)$this->footer
    				)
    			);
    		}
    		private function replace ($src, $value = null, $line = null)
    		{
    			return str_replace(
    				array('{value:'. $this->uid .'}','{line:'. $this->uid .'}'),
    				array($value, $line),
    				$src
    			);
    		}
    		private function execute_inline($new, $old, $new_format, $old_format, $i)
    		{
    			$line_new = explode(' ', $new);
    			$line_old = explode(' ', $old);
    			$modif = array_diff($line_new, $line_old);
     
    			$res = ' ';
    			$n = $m = '';
     
     
    			// Tant que nous n'avons pas parcourru toutes les entités de la ligne
    			foreach($line_new as $j => $w)
    			{
    				// Vérifie si l'entité est présente dans le tableau des modifs
    				if ( isset($modif[$j]) )
    				{
    					// J'utilise ici un buffer pour stocker temporairement pour ne par morceler des données d'un
    					// meme type (exemple: INLINE_NORMAL) en plusieures morceaux							
    					if ( strlen($n) )
    					{
    						$res .= $this->replace($this->line_format[$old_format], $n, $i);
    						$n = '';
    					}
    					$m .= $w . ' ';
    				}
    				else
    				{
    					// Buffer...
    					if ( strlen($m) )
    					{
    						$res .= $this->replace($this->line_format[$new_format], substr($m,0,-1), $i);
    						$m = '';
    						$n = ' ';
    					}
    					$n .= $w . ' ';
    				}
    			}
    			// On vide les buffers
    			if (strlen($m)) { $res .= $this->replace($this->line_format[$new_format], $m, $i); }
    			elseif (strlen($n)) { $res .= $this->replace($this->line_format[$old_format], $n, $i); }
     
    			return $res;
    		}
    		private function push_line($value, $i, $type)
    		{
    			$value = str_replace("\r\n", '', $value);
    			$this->files['res']['content'][] = $this->replace($this->line_format[$type], $value, $i+1);
    		}
    	}
    ?>
    J'aimerai que toute les données soit en 3 colonnes pour y mettre un <img src="site du logo">

    Afin de faire jolie


Discussions similaires

  1. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48
  2. Réponses: 2
    Dernier message: 20/10/2006, 10h49
  3. [Excel] Extraire des données d'un fichier xls en php
    Par splinternabs dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 06/04/2006, 09h11
  4. Extraire des donnés d'un fichier texte
    Par sadsad dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2006, 15h09
  5. Réponses: 7
    Dernier message: 29/09/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo