Problçme dans les fichiers

Fermé
Cockeed - Modifié par jordane45 le 4/11/2016 à 15:13
 Cockeed - 4 nov. 2016 à 16:34
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)

3 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
4 nov. 2016 à 15:31
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 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
4 nov. 2016 à 15:37
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 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
4 nov. 2016 à 15:24
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
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