Problçme dans les fichiers

Cockeed -  
 Cockeed -
Bonjour,

Salut à tous je dois supprimer les doublons dans un fichier je souhaite procèder comme ceci :

- d'abord je récupére le numéro de la ligne courante,
- puis je fais une boucle partant de 0 jusqu'à ma ligne courante et supprime toute les lignes en doublons

voici mon code :
$file=fopen($less,'r+');
        $contenu=file_get_contents($less);
        $cssVar = [];
        while (!feof($file)) {
            $ln = fgets($file);
            if ($ln[0] != "@") {
                continue;
            }
            // get the key and value for the css variable
            $bits = explode(":", $ln);
            $key = substr(trim($bits[0]), 1);
            $value = trim($bits[1]);

            // store the value
            $cssVar[$key] = $value;
            if($key == 'bg-path-image')
            {
                //comment recuperer le numero de la ligne courante
                $current = debug_backtrace(__LINE__);
                $contenuMod=str_replace($value, 'url(' . "'" . '../img/' . $fileName . "'" .');', $contenu);
                fwrite($file, $contenuMod);
                $this->startProcess();
            }
            $contenu = explode(PHP_EOL, $contenu);
            for($i = 0; $i <$current ; $i++)
                {
                    unset($contenu[$i]);
                }
            $contenu = array_values($contenu);
        }
        fclose($file);


et voici le fichier que je souhaite modifier :

@espace: #830AFF;
@opticien: #E71414;
@actus: #BEA261;
@promos: #125504;
@carte: #0C2742;
@commandes: #FF9B46;
@magasins: #4d004d;
@clrmag: #830AFF;
@footer : #490206;
@header: #490206;
@notifications: rgba(150, 150, 150, 0.75);
@default: rgba(0, 0, 0, 0);
@espace-rdv: #8ED1EC;
@espace-ordonnances: #5A8898;
@espace-correction: #95b5c2;
@espace-visites: #3F5B67;
@ordonnance-choisir-photo: #D80333;
@ordonnance-prendre-photo: #DD161B;
@ordonnance-envoyer-photo: #A40229;
@ordonnance-voir-photo: #8b0324;
@couleur-contours: #fff;
@bg-path-image: url('../img/profile_menu.png');
@espace: #830AFF;
@opticien: #E71414;
@actus: #BEA261;
@promos: #125504;
@carte: #0C2742;
@commandes: #FF9B46;
@magasins: #4d004d;
@clrmag: #830AFF;
@footer : #490206;
@header: #490206;
@notifications: rgba(150, 150, 150, 0.75);
@default: rgba(0, 0, 0, 0);
@espace-rdv: #8ED1EC;
@espace-ordonnances: #5A8898;
@espace-correction: #95b5c2;
@espace-visites: #3F5B67;
@ordonnance-choisir-photo: #D80333;
@ordonnance-prendre-photo: #DD161B;
@ordonnance-envoyer-photo: #A40229;
@ordonnance-voir-photo: #8b0324;
@couleur-contours: #fff;
@bg-path-image: url('../img/profile_menu.png');
@facebookcolor: #3B5998;
@twittercolor: #1da1f2;
@radius-btn: 15px;
@radius-menu: 15px;


Si quelqu'un à une idée :) :) :) :)

EDIT : Ajout des balises de code (La coloration syntaxique)

A voir également:

3 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Tu peux utiliser la fonction php file() pour récupérer toutes les lignes d'un fichier dans un tableau.
Il suffit ensuite d'utiliser la fonction array_unique() sur ce tableau pour supprimer les doublons.

Exemple :
$lignes = file('doc.txt');
$lignesSansDoublon = array_unique($lignes);


Bonne journée,
1
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Heu oui...
Pourquoi faire simple quand on peut faire compliquer..... faut vraiment que je parte en weekend.... :-)


$fichierTxt = "doc.txt";

//Récupération du contenu du fichier
$arr_F =  file('doc.txt');


// Suppression des doublons
$uniq_AF = array_unique($arr_F);


// Ne te reste plus qu'à réécrire le fichierTxt
// par exemple :
$fp = fopen('Newfile.txt', 'w');
foreach($uniq_AF as $row=>$value){
 fwrite($fp,$value);  
}

fclose($fp);

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Un truc du genre ?
<?php

$fichierTxt = "doc.txt";

//Récupération du contenu du fichier
$file = file_get_contents($fichierTxt, FILE_USE_INCLUDE_PATH);

//On stocke le tableau dans un array en se servant du @ comme séparateur
$arr_F = explode("@",$file);

// Tri du tableau (pas obligatoire :-)) 
asort($arr_F);

//affichage du tableau AVANT suppression des doublons
echo "<pre>";
print_r($arr_F);
echo "</pre>";

// Suppression des doublons
$uniq_AF = array_unique($arr_F);

//affichage du tableau APRES suppression des doublons
echo "<pre>";
print_r($uniq_AF);
echo "</pre>";

// Ne te reste plus qu'à réécrire le fichierTxt
// par exemple :
$fp = fopen('Newfile.txt', 'w');
foreach($uniq_AF as $row=>$value){
 fwrite($fp,"@".$value);  
}

fclose($fp);


?>

0
Cockeed
 
Merci pour vos réponses. Mais malheureusement mon problème persiste.
Je vais etre plus précis dans mes explications, donc ce que je souhaite dans ce bout de code c'est de remplaçer le contenu de l'url dans mon fichier texte c.a.d si dans mon fichier j'ai @bg-path-image : url('../img/funny.png'); je souhaite depuis mon fichier php la remplacer par @bg-path-image : url('../img/happy.jpg');
J'ai deja ce bout de code qui est fonctionnel :
$file=fopen($less,'r+');
        $contenu=file_get_contents($less);
        $cssVar = [];
        while(!feof($file)) {
            $ln = fgets($file);
            $arr_F =  file($less);
            if($ln[0] != "@") {
                continue;
            }
            // get the key and value for the css variable
            $bits = explode(":", $contenu);
            $key = substr(trim($bits[0]), 1);
            $value = trim($bits[1]);

            // store the value
            $cssVar[$key] = $value;
            if($key == 'bg-path-image')
            {
                $contenuMod=str_replace($value, 'url(' . "'" . '../img/' . $fileName . "'" .');', $arr_F);
                fwrite($file, $contenuMod);
                $this->startProcess();continue;
            }

        }
        fclose($file);



MAIS qui me génére X premiers doublons contenu dans mon fichier texte (X fait reference au numéro de la ligne de mon url à remplacer), soit :
@espace: #830AFF;
@opticien: #E71414;
@actus: #BEA261;
@promos: #125504;
@carte: #0C2742;
@commandes: #FF9B46;
@magasins: #4d004d;
@clrmag: #830AFF;
@footer : #490206;
@header: #490206;
@notifications: rgba(150, 150, 150, 0.75);
@default: rgba(0, 0, 0, 0);
@espace-rdv: #8ED1EC;
@espace-ordonnances: #5A8898;
@espace-correction: #95b5c2;
@espace-visites: #3F5B67;
@ordonnance-choisir-photo: #D80333;
@ordonnance-prendre-photo: #DD161B;
@ordonnance-envoyer-photo: #A40229;
@ordonnance-voir-photo: #8b0324;
@couleur-contours: #fff;
@bg-path-image: url('../img/profile_menu.png');@espace: #830AFF;
@opticien: #E71414;
@actus: #BEA261;
@promos: #125504;
@carte: #0C2742;
@commandes: #FF9B46;
@magasins: #4d004d;
@clrmag: #830AFF;
@footer : #490206;
@header: #490206;
@notifications: rgba(150, 150, 150, 0.75);
@default: rgba(0, 0, 0, 0);
@espace-rdv: #8ED1EC;
@espace-ordonnances: #5A8898;
@espace-correction: #95b5c2;
@espace-visites: #3F5B67;
@ordonnance-choisir-photo: #D80333;
@ordonnance-prendre-photo: #DD161B;
@ordonnance-envoyer-photo: #A40229;
@ordonnance-voir-photo: #8b0324;
@couleur-contours: #fff;
@bg-path-image: url('../img/profile_menu.png');
@facebookcolor: #3B5998;
@twittercolor: #1da1f2;
@radius-btn: 15px;
@radius-menu: 15px;

EDIT : Ajout des balises de code ....... ENCORE ......

Enfin ce que je souhaite faire c'est supprimer ces X premiers doublons dans mon fichier texte sans modifier mon précieux bout de code :/ :/
En vous remerciant d'avance oh ! confrères de la programmation ;)
0