|
Untitled Document
 |
Utilisation avancée des fichiers |

|
Tutorial écrit par : Daniel Fabien - Script
Masters
|
|
Introduction |
|
|
Nous allons aborder ici l'utilisation de fonctions avancées.
Attention, il peut s'avérer utile de posséder quelques notions
élémentaires d'algorithmie pour comprendre le déroulement
de ces scripts.
Nous verrons notamment l'insertion de donnée à une ligne
bien précise du fichier, mais également la modification
d'une ligne et enfin, une suppression.
|
|
Insertion d'une ligne |
|
|
Imaginons que nous possédons un fichier contenant sur chacune de
ces lignes un nombre
Ces nombres sont ordonnés de manière croissante à
l'intérieur du fichier. Nous souhaitons alors ajouter le nombre
" 952 " tout en maintenant l'ordre instauré. Il est donc
nécessaire de l'ajouter en 4éme position. Voici un script
permettant de le faire :
| <?php $fichier = "fichier.txt"; // Nom de votre
fichier
$nombre = 952;
$fin = 0;
$fp = fopen($fichier,"r"); // Ouverture du fichier en
lecture
$fp_temp = fopen("temp.txt","w+"); // Ouverture
du fichier temporaire
while (!feof($fp)) { // Parcours du fichier
$ligne = fgets($fp,4000); // On récupère le nombre
de la ligne
if ($ligne<=$nombre || $fin){ // Condition de placement
fwrite($fp_temp,$ligne);
} else { // Sinon, on place 952
fwrite($fp_temp,$nombre."\n");
fwrite($fp_temp,$ligne);
$fin = 1;
}
}
fclose($fp); // Fermeture du fichier
fclose($fp_temp);
copy("temp.txt",$fichier); // On recopie le fichier temporaire
unlink("temp.txt"); // On l'efface
?>
|
A la fin du script, nous obtenons le fichier suivant :
Le principe est très simple, on parcours le fichier original en
lisant chaque ligne l'une après l'autre. Si la ligne contient un
nombre inférieur ou égale à celui que nous souhaitons
insérer, alors on se contente de recopier cette ligne dans le fichier
temporaire.
En revanche, si cette condition n'est plus valide, alors on a trouvé
l'emplacement correct. On insère alors le nombre, puis la dernière
ligne. Enfin, on passe le booléen fin à vrai de façon
à prendre le relais de la condition de placement qui forcement
n'est plus vrai. Les dernières lignes sont donc recopiées
dans le fichier temporaire.
Pour finir, on copie le contenu de ce fichier temporaire dans celui du
fichier source et on efface le fichier temporaire. L'opération
se fait donc de manière transparente.
L'intérêt de ce procédé ? Il est souvent bien
moins coûteux en ressource d'effectuer un classement dès
la création d'un fichier plutôt qu'a chaque fois qu'on accède
au contenu de celui-ci.
|
 |
Modification d'une ligne |
| |
A présent, nous souhaitons incrémenter une des valeurs du
fichier. Nous savons que l'ancienne valeur vaut 952 et nous souhaitons
la remplacer par 953.
<?php
// Modification d'une ligne $fichier = "fichier.txt";
// Nom de votre fichier
$ancienNombre = 952; // nombre qu'on souhaite supprimer du fichier
$nouveauNombre = 953;
$fp = fopen($fichier,"r"); // Ouverture du fichier en
lecture
$fp_temp = fopen("temp.txt","w+"); // Ouverture
du fichier temporaire
while (!feof($fp)) { // Parcours du fichier
$ligne = fgets($fp,4000); // On récupère le nombre
de la ligne
if ($ligne!=$ancienNombre){ // Condition de placement
fwrite($fp_temp,$ligne);
} else {
fwrite($fp_temp,$nouveauNombre."\n");
}
}
fclose($fp); // Fermeture du fichier
fclose($fp_temp);
copy("temp.txt",$fichier); // On recopie le fichier temporaire
obtenu
unlink("temp.txt"); // On l'efface
?>
|
| Contenu de fichier.txt avant exéctution du script: |
| Contenu de fichier.txt après exéctution du script: |
Vous l'aurez compris, le déroulement de ce script est relativement
simple par rapport au premier. En effet, il se contente de parcourir chaque
ligne du fichier. Si la ligne est différente de celle recherchée,
alors il la recopie, sinon, il recopie la ligne de remplacement.
Il peut également être utile de rechercher simplement une
occurrence de la ligne. Pour cela, utilisez les expressions rationnelles.
Nous l'aborderons dans un autre tutorial car nous risquons sinon de nous
éloigner du sujet.
|
 |
Suppression d'une ligne |
| |
De la même façon que précédemment, il est
possible de supprimer une ligne d'un fichier.
<?php
// Supression d'une ligne $fichier = "fichier.txt"; //
Nom de votre fichier
$nombre = 952; // Nombre qu'on souhaite supprimer du fichier
$fp = fopen($fichier,"r"); // Ouverture du fichier en
lecture
$fp_temp = fopen("temp.txt","w+"); // Ouverture
du fichier temporaire
while (!feof($fp)) { // Parcours du fichier
$ligne = fgets($fp,4000); // On récupère le nombre
de la ligne
if ($ligne!=$nombre){ // Condition de placement
fwrite($fp_temp,$ligne);
}
}
fclose($fp); // Fermeture du fichier
fclose($fp_temp);
copy("temp.txt",$fichier); // On recopie le fichier temporaire
obtenu
unlink("temp.txt"); // On l'efface
?>
|
| Contenu de fichier.txt avant exéctution du script: |
| Contenu de fichier.txt après exéctution du script: |
Ce script ne diffère pas beaucoup du précédent.
Au lieu de remplacer le nombre, il l'ignore, si bien qu'il n'est pas recopié
dans le fichier temporaire.
|

|
Conclusion |
| |
Les méthodes vues au cours de ce tutorial ne sont pas universelles.
Nous en parlons afin de vous donnez une idée de méthodes
rapide pour modifier vos fichiers. Il est également utile de rappeler
que chaque cas peut différer. Prenez donc surtout connaissance
du principe.
Enfin, il ne faut pas oublié les bases de données qui sont
bien plus efficaces que les fichiers lorsque vous avez un grand nombre
d'informations et d'accès à effectuer.
|
|
|
|