Page 1 sur 1

[fonction]Supprimer une donnée d'un fichier txt

Posté : 01 avr. 2006, 10:37
par dinastar
Bonjour à tous,

Je souhaite suprimer une donnée dans un fichier texte. Voici l'allure de son contenu:
donnée1:donnée2:donnée3: ...
Donc séparé par des ":"
et avoir par exemple en sortie à l'interieur de ce même fichier:
donnée1:donnée3: ...
Et voici le script en question:

Code : Tout sélectionner

$fp=fopen("$file","r"); $contenu=fgets($fp,4096); fclose($fp); $contenu_array = explode(":",$contenu); fclose($fp); //Voilà, il me faut mettre ici un truc du style //$new_modif=strtr($info_hash, "", $contenu): // biensur ça marche pas!! //Je pense que l'idée serait de modifier toute la chaine (ou la valeur du tableau?) et de réécrire le //tout dans le fichier en faisant par exemple: $fp=fopen("$file","w+"); fwrite($fp,$new_modif); fclose($fp);


Quelles fonctions dois-je utiliser pour arriver à mes fins?? Je me perd avec celles du style str_replace() ereg() strtr()...

Pouvez-vous m'aider??

Merci et à bientôt!

Posté : 01 avr. 2006, 11:01
par mario
fgets() permet de lire la ligne courante d'un fichier.
si c'est ce que tu souhaites, il me semble que tu dois utiliser cette fonction avec une boucle
ex:
while ($ligne = fgets($fp, 255)){
   echo $ligne.'<br/>';
}
pour lire un fichier en une fois, il faut utiliser ce genre de fonction:
$taille = filesize($file);
$lecture_complete = fread($fp, $taille);
// affichage du fichier
echo $lecture_complete;
Pour cette ligne:
$fp=fopen("$file","r");
il n'est pas utile d'encadrer $file de double quotes.

Que souhaites tu supprimer ? ton exemple n'est pas précis (c'est donnée2) ?
peux tu afficher une ligne concrète avec en gras la portion à supprimer ?
Est ce que chaque ligne a une structure identique ? (avec les mêmes séparateurs) ?

Posté : 01 avr. 2006, 11:24
par dinastar
Merci pour tes infos mario!

En fait, ce sont des fichiers utilisateurs que je dois modifier. Un fichier user contient les infos suivantes et séparées par ":"
username:password:donnée1:donnée2:données3: ...
donée[x] sont des "hash" de fichier. Et l'utilisateur peut en ajouter, mais doit avoir la possibilité d'en supprimer.

Je sais identifier le donnée à supprimer.

Je pense, que les étapes sont les suivante:
1) lire le fichier user (OK)
2) identifier la donnée à supprimer (OK)
3) supprimer la donnée en question (pas OK)
4)réecrire dans le fichier (OK)

Sachant que, lors de la lecture, je met le contenu de mon fichier dans un tableau avec:

Code : Tout sélectionner

$contenu_array = explode(":",$contenu);
Ce que je voudrais savoir c'est:
Comment supprimer la donnée $contenu_array[$i] de mon tableau et réécrire le nouveau tableau ainsi modifier dans le fichier user?
Ou existe t'il un moyen de supprimer la donnée directement dans le fichier texte?

J'espère m'être correctement exprimé!!

Merci

Posté : 01 avr. 2006, 11:32
par dinastar
Ha, j'allais oublier, pas de prise de tête avec les lignes, puisque les fichier user s'appellent $user.txt et ne contiennent donc qu'une seule ligne. Ce n'est pas un seul fichier comprenant un utilisateur par ligne!

Posté : 01 avr. 2006, 11:45
par mario
<?php
// disons que je souhaite supprimer l'index n° 1 (password)
$str = 'username:password:donnée1:donnée2:données3';
$str = explode(':',$str); // explode -- Coupe une chaîne en segments
/*
Array
(
    [0] => username
    [1] => password
    [2] => donnée1
    [3] => donnée2
    [4] => données3
)
*/

unset($str[1]); // unset -- Détruit une variable
/*
Array
(
    [0] => username
    [2] => donnée1
    [3] => donnée2
    [4] => données3
)
*/

echo $str = implode(':',$str); // implode -- Rassemble les éléments d'un tableau en une chaîne
/*
username:donnée1:donnée2:données3
*/
?>
il ne te reste plus qu'à écraser le contenu de ton fichier

Posté : 01 avr. 2006, 13:54
par Invité
Ok, merci pour cet exemple. Je vais faire en sorte de l'adapter pour mon script et je te dirai ce qu'il en est.

Merci et à plus!

Posté : 01 avr. 2006, 18:51
par dinastar
C'est génial, ça marche comme je voulais!! L'idée avec implode... j'y avais pas pensé, ça revient à quelque chose de simple en fait. Mon tracker bittorrent et maintenant presque opérationnel au niveau de l'identification et de la gestion des .torrent.

Tu peux aller voir si tu veux Mario.

http://www.dinastar-elec.info/tracker

Encore merci! :D

Posté : 01 avr. 2006, 18:59
par mario
génial :pouce: