GESTION DE FICHIERS

tsolohar - 17 avril 2013 à 11:21
cs_Astalavista Messages postés 192 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 3 février 2010 - 6 juin 2013 à 02:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/55087-gestion-de-fichiers

cs_Astalavista Messages postés 192 Date d'inscription lundi 24 décembre 2001 Statut Membre Dernière intervention 3 février 2010
6 juin 2013 à 02:03
- Tu réécrit a chaque modification ton fichier (file_put_contents)
Modifie tes propriétés de class et fait un seul file_put_contents dans ton destructeur.
- Tu utilise un tableau avec la commande file(), alors pour ajouter du texte fait simplement : $this->_filegestion[] = $value;
- Plutôt que d'utiliser la méthode elements() dans ta class, regarde du coté de l'héritage de ArrayObject, sa te permeterra de faire ceci :
$obj = new Gestionfichier('monFichier.txt');
echo $obj[0];
echo $obj[10];
...
De cette façon tu enlèvera tes methodes :
- ajoute() => $obj[] = 'mon ajout';
- enleve() => unset($obj[5]);
- maj() => $obj[5] = 'Ma nouvelle ligne';
- tab() => Inutile, car accès directe.
- elements() ( Citer plus haut)
- nbre() => count($obj);

Après réflexion, tu n'auras plus que des méthodes de surcharge ...

Après, c'est juste un conseil, une idée, ... tu en fait ce que tu en veut ...
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
2 mai 2013 à 09:11
PS : idem pour le "comptage" du nombre d'élément, cela pourrait être amélioré.
En effet, actuellement il y a un recomptage du nombre d'éléments à chaque lecture du fichier (dans initvar() ) or le nombre d'éléments n'est nécessaire que dans la fonction "nbre()" qui n'est appelée que manuellement par l'utilisateur si il le désire.
A l'heure actuelle, le "count" est effectué à chaque fois, mais il peut ne jamais servir, ou dans de très rares cas.
Le comptage devrait donc s'effectuer dans la fonction "nbre()" au lieu de le faire tout le temps => gain de performance.

EM.
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
2 mai 2013 à 09:06
Bonjour,

La classe est pas mal faite, par contre elle pourrait être améliorée:

A)il y a des problèmes de performances sur la lecture du fichier :
Exemple pour la fonction ajoute().
1) on concatène les textes
2) on écrit tout dans le fichier
3) on appelle la fonction initvar
4) la fonction initvar recharge intégralement le fichier
5) on compte le nombre d'éléments à partir du contenu du fichier

On ne devrait pas avoir à passer par la relecture du fichier pour savoir le nombre d'éléments qu'on a.
Il faudrait gérer le tout à partir du tableau $this->_filegestion.
1) on concatène les données dans le tableau $this->_filegestion
2) on écrit tout dans le fichier
3) on compte le nombre d'élément dans le tableau $this->_filegestion

B) un autre problème de performance est le nombre d'écriture/lecture élevées.
Si par exemple je veux rajouter 50 éléments dans le fichier, je suis obligé de faire 50 écritures (et 50 lectures si on ne prend pas en compte le point A).
Il faudrait que l'ensemble des fonctions d'ajout, suppression, mise à jour n'effectue aucune écriture/lecture du fichier physique mais travaille uniquement à partir du tableau "$this->_filegestion".
Pour remplir réellement le fichier, il faudrait créer une fonction "sauvegarder()" (par exemple) qui enregistre physiquement le contenu du tableau $this->_filegestion.

C) dernière remarque : limitation au données de type texte.
Actuellement, il ne semble possible que de passer des données texte, si on passe un tableau cela ne marchera pas.
Bien que cela pourrait être à l'utilisateur de sérialiser son tableau avant l'appel de ta classe, il pourrait être pas mal de prévoir le cas ou le contenu à ajouter est un tableau, et le sérialiser automatiquement.

Bonne continuation.

EM.
Bonjour,
Je suis tombé sur cette solution, elle est similaire à celle que je recherche.

Par contre, de mon coté je voudrais regrouper des données contenues sur plusieurs classeurs dans un même feuille.

Toute en gardant la logique càd garder les même données en ligne et les mêmes colonnes.

Merci
Cordialement.
Rejoignez-nous