Supprimer une ligne dans un fichier avec php
jb1993
Messages postés
85
Date d'inscription
Statut
Membre
Dernière intervention
-
jb1993 Messages postés 85 Date d'inscription Statut Membre Dernière intervention -
jb1993 Messages postés 85 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis en train de crée une mini-bibliothèque en php permettant de gérer plus simplement un style de fichier en .zfl. Le but de ce nouveau petit langage est de simplifier les constantes en les rendant simple d'accès sans avoir tout les d'inconvénients de la gestion des fichiers en php.
Néanmoins, une erreur commence à détruire tout mon projet. Supprimer une ligne ou modifier la valeur. Les données sont sauvegarder de la sorte dans le fichier .zfl
Clef:Valeur
Clef2:Valeur2
Néanmoins, même avec toute la documentation utiliser je ne réussis pas à trouver de fonction pour supprimer entièrement une ligne ou simplement modifier une valeur en évitant qui mettes à la place une valeur NULL. La source de la fonction :
Comme précisions : $files est le fichier à modifier et $nom est la clef à supprimer. J'ouvre les fichiers avec l'attribue a+ ou x+. Pour le problème, il m'ajoute simplement à la fin du fichier "Delete line".
Cordialement, jb1993.
je suis en train de crée une mini-bibliothèque en php permettant de gérer plus simplement un style de fichier en .zfl. Le but de ce nouveau petit langage est de simplifier les constantes en les rendant simple d'accès sans avoir tout les d'inconvénients de la gestion des fichiers en php.
Néanmoins, une erreur commence à détruire tout mon projet. Supprimer une ligne ou modifier la valeur. Les données sont sauvegarder de la sorte dans le fichier .zfl
Clef:Valeur
Clef2:Valeur2
Néanmoins, même avec toute la documentation utiliser je ne réussis pas à trouver de fonction pour supprimer entièrement une ligne ou simplement modifier une valeur en évitant qui mettes à la place une valeur NULL. La source de la fonction :
function zfiles_erase($nom, $files) { $trouver = true; if(isset($files)) { do { $ligne = explode(':', fgets($files)); if($ligne[0] == $nom) { fseek($files, 0); fputs($files, 'Delete line'); echo "<br />Ligne supprimer."; $trouver = false; } elseif($ligne[0] == NULL) { echo "<br />Paramètre non existant."; $trouver = false; } } while($trouver); } else { echo "<br />Aucun fichier ouvert."; } }
Comme précisions : $files est le fichier à modifier et $nom est la clef à supprimer. J'ouvre les fichiers avec l'attribue a+ ou x+. Pour le problème, il m'ajoute simplement à la fin du fichier "Delete line".
Cordialement, jb1993.
A voir également:
- Supprimer une ligne dans un fichier avec php
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Impossible de supprimer un fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
Utilise une expression rationnelle, de façon à obtenir par exemple :
function zfiles_erase($nom, $fichier) { if( !is_file($fichier) ) trigger_error('Fichier ' . $fichier . 'inexistant', E_USER_WARNING); else { $listeValeur = file_get_contents($fichier); if( ($changement = preg_replace('#\r?\n' . $nom . ':.+#Us', '', $listeValeur)) != $listeValeur ) if( file_put_contents($fichier, $changement) ) return true; return false; } } var_dump(zfiles_erase('machin', 'erase.txt'));À améliorer, mais l'idée est là.
Il y a des choses que je ne comprend pas :
Fonction que je ne connais pas :
file_get_contents()
file_put_contents()
Et surtout le regex spécial, que fait-il exactement ?... vous pouvez m'expliquer le code de celui-ci ? ^^'
$listeValeur = file_get_contents($fichier); if( ($changement = preg_replace('#\r?\n' . $nom . ':.+#Us', '', $listeValeur)) != $listeValeur ) if( file_put_contents($fichier, $changement) ) return true; return false;
Fonction que je ne connais pas :
file_get_contents()
file_put_contents()
Et surtout le regex spécial, que fait-il exactement ?... vous pouvez m'expliquer le code de celui-ci ? ^^'
Bah pour les fonctions, un petit tour vers la doc php ;)
Le pattern de l'expression rationnelle signifie que l'on remplace la chaine contenue dans $nom située en début de nouvelle ligne ( \r?\n ), le \r? c'est pour windows, le ? signifiant qu'il est optionnel, suivie de : donc, lui meme suivi de n'importe quel caractères (.+).
Les options (Us) signifiant que l'on inverse la tendance à la gourmandise (U), le s quand à lui signifie que le . (.+) ne doit pas prendre en compte les caractères de nouvelles ligne.
[EDIT]
Après lecture de ton mp, j'ai en effet omit le début du fichier, il faut donc remplacer le masque du preg_replace() par #(?:^|\r?\n' ). $nom . ':.+#Us
Le pattern de l'expression rationnelle signifie que l'on remplace la chaine contenue dans $nom située en début de nouvelle ligne ( \r?\n ), le \r? c'est pour windows, le ? signifiant qu'il est optionnel, suivie de : donc, lui meme suivi de n'importe quel caractères (.+).
Les options (Us) signifiant que l'on inverse la tendance à la gourmandise (U), le s quand à lui signifie que le . (.+) ne doit pas prendre en compte les caractères de nouvelles ligne.
[EDIT]
Après lecture de ton mp, j'ai en effet omit le début du fichier, il faut donc remplacer le masque du preg_replace() par #(?:^|\r?\n' ). $nom . ':.+#Us