Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1295 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Manipulation de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Manipulation de fichier

n°1511419
teycir
Posté le 06-02-2007 à 15:33:54  profilanswer
 

Bonjour;
Je voudrais savoir comment faire pour parcourir un fichier.txt pour trouver une donnée puis la supprimer.  
Voici ce que j'ai fait mais cela ne fonctionne pas.

Code :
  1. if(    isset($_POST['effacer']) && isset($_POST['nom']) )
  2. {
  3.     if(file_exists("clients.txt" ))
  4.     {
  5.     $ouvre=fopen("clients.txt","r" );
  6.     while (!feof ($ouvre))         
  7.         {
  8.         $lecture = fgets($ouvre, 400);
  9.         $donnee=explode(";",$lecture); 
  10.         $combien=count($donnee)-1;
  11.         for ($i=0;$i<$combien;$i++)
  12.             {
  13.             if (ereg($_POST['nom'],$donnee[$i])){$donnee[$i]=$donnee[$i]="";}
  14.             if ($donnee[$i]!="" ){$liste_modif.=$donnee[$i].";";}
  15.             }
  16.     }
  17.     fclose($ouvre);
  18.     $ouvre=fopen("clients.txt","w+" );
  19.     fwrite($ouvre,$liste_modif);
  20.     fclose($ouvre);
  21.     echo "<h2>Client ",$_POST['nom'],"  effacé </h2> ";
  22. }
  23. }


Si qq1 a des informations, elles sont les bienvenues.
Merci.

mood
Publicité
Posté le 06-02-2007 à 15:33:54  profilanswer
 

n°1511432
dwogsi
Défaillance cérébrale...
Posté le 06-02-2007 à 15:50:44  profilanswer
 

Ton fichier est sous quelle forme?
Ce genre là :

Dupont;Jean;AutreInfos
Durand;Patrice;EncoreLautreInfo
Cury;Pierre-poulet;marie

 

Si oui, moi je ferais un file_get_contents() pour récupérer simplement tout le contenu du fichier, puis un double explode sur \n et ;.

Code :
  1. <?
  2. $content = file_get_content('clients.txt');
  3. $list = explode(';',explode('\n',$content));
  4. ?>
 

Il est ensuite très simple de chercher le nom de celui que l'on veut supprimer dans le tableau ainsi obtennu.
Enfin pour réécrire le tableaux, imploder le tout!


Message édité par dwogsi le 06-02-2007 à 15:56:07

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1511438
soju
One shot !
Posté le 06-02-2007 à 15:53:51  profilanswer
 
n°1511440
dwogsi
Défaillance cérébrale...
Posté le 06-02-2007 à 15:56:39  profilanswer
 

Oui tiens je les oublie toujours celles-là.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1511501
teycir
Posté le 06-02-2007 à 17:13:34  profilanswer
 

[quotemsg=1511432,2,219001]Ton fichier est sous quelle forme?
Ce genre là :

Dupont;Jean;AutreInfos
Durand;Patrice;EncoreLautreInfo
Cury;Pierre-poulet;marie


 
Oui, le fichier est sous cette forme.

n°1511524
dwogsi
Défaillance cérébrale...
Posté le 06-02-2007 à 18:13:15  profilanswer
 

Ok, bon alors ma méthode peut fonctionner. mais ce n'est pas forcément la meilleur et elle peut poser des problèmes de mémoire si le fichier est très volumineux.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1511821
teycir
Posté le 07-02-2007 à 14:39:37  profilanswer
 

Mon problème persiste encore:
voici en détail ce qui se passe
 
Le fichier se présente dans la forme initiale suivante:
aaaa;bbbb;cccc;dddd
xxxx;zzda;azdaz;azrffzefzef
szddqdq;dd;zd;zdazd
 
Ce que je veux, c'est quand je $_POST la première valeur d'une ligne par exemple xxxx de la ligne xxxx;zzda;azdaz;azrffzefzef  toute la ligne disparaisse.
 
Ce qui donnerait:  
aaaa;bbbb;cccc;dddd
szddqdq;dd;zd;zdazd
 
Hors avec mon code actuel  

Code :
  1. if (    isset($_POST['effacer']) && isset($_POST['nom1']) )
  2. {
  3.     if(file_exists("clients.txt" ))
  4.     {
  5.     $id_file=fopen("clients.txt","r" );
  6.     flock($id_file,1);
  7.     $liste_modif="";
  8.         while (!feof ($id_file)) // Parcourir le fichier tant qu'il n'est pas fini
  9.         {
  10.         $lecture = fgets($id_file, 4096);
  11.         $donnee=explode(";",$lecture); 
  12.         $combien=count($donnee);
  13.         for ($i=0;$i<$combien;$i++)
  14.             {
  15.             if (ereg($_POST['nom1'],$donnee[$i])){$donnee[$i]="";}
  16.             if ($donnee[$i]!="" ){$liste_modif.=$donnee[$i].";";} // Cas de donnée nulle
  17.             }
  18.         }
  19.         flock($id_file,3);
  20.         fclose($id_file);
  21.         $id_file=fopen("clients.txt","w+" );
  22.         fwrite($id_file,$liste_modif);
  23.         fclose($id_file);
  24.         echo "<h2>Client ",$_POST['nom1'],"  effacé </h2> ";
  25.     }
  26.     else {echo "fichier inaccessible";}
  27. }


 
j'ai pour résultat:
aaaa;bbbb;cccc;dddd
;zzda;azdaz;azrffzefzef
;szddqdq;dd;zd;zdazd;
 
Soit la suppression de xxxx uniquement et non pas toute la ligne, par ailleurs il y a un ";" qui s'insère dans la ligne suivante.
 
Comment faire pour obtenir le résultat (lorsque je demande de supprimer la ligne dont le premier élement est xxxx):  
aaaa;bbbb;cccc;dddd
szddqdq;dd;zd;zdazd
 
Je continue de faire de nouvelles combinaisons, pour le moment cela ne fonctionne pas.
 
Merci.


Message édité par teycir le 07-02-2007 à 14:43:14
n°1511825
soju
One shot !
Posté le 07-02-2007 à 14:54:48  profilanswer
 

pourquoi tester tous les éléments d'une ligne alors que c'est le premier élément qui t'interesse ?
il y a plus simple : si la ligne commence par "xxxx;" alors tu supprimes, donc pas besoin de explode, ereg ...etc

n°1511834
hardcorega​mer
Posté le 07-02-2007 à 15:08:30  profilanswer
 

Salut,
j'ai un peut simplifié
 
if (isset($_GET['effacer']) && isset($_GET['nom1']))
{
  if(file_exists("clients.txt" )) {
    $file = file("clients.txt" ); // conserve les sauts a la ligne
    foreach($file as $line) {
      if(substr($line, 0, strlen($nom1)) != $nom1) {
        $new .= $line; //on ne garde que les lignes qui ne commencent pas par $nom1
      } else echo "<h2>Client ",$_GET['nom1'],"  effacé </h2> ";
    }
    fwrite(fopen("clients.txt","w+" ), $new);
  }
  else {echo "fichier inaccessible";}
}
 
tu peux remplacer le strlen($nom1) par une recherche de la position du 1er ";"

n°1511847
soju
One shot !
Posté le 07-02-2007 à 15:31:36  profilanswer
 

tu vas effacer toutes les lignes qui commencent par "xxxx",
à mon avis il ne faut effacer que les lignes qui commencent par "xxxx;"

mood
Publicité
Posté le 07-02-2007 à 15:31:36  profilanswer
 

n°1511856
hardcorega​mer
Posté le 07-02-2007 à 15:57:23  profilanswer
 

ben
 
if(substr($line, 0, strlen($nom1)+1) != $nom1 . ";" )
 
ou comme je disais avec la recherche du 1er ";" selon les gouts ^^
 
if(substr($line, 0, strpos($line, ";" )) != $nom1)

Message cité 1 fois
Message édité par hardcoregamer le 07-02-2007 à 16:40:15
n°1512635
teycir
Posté le 09-02-2007 à 15:24:48  profilanswer
 

hardcoregamer a écrit :

ben

 

if(substr($line, 0, strlen($nom1)+1) != $nom1 . ";" )

 

ou comme je disais avec la recherche du 1er ";" selon les gouts ^^

 

if(substr($line, 0, strpos($line, ";" )) != $nom1)

 

Salut;
voici une solution qui a finalement marché:

Code :
  1. if (isset($_POST['effacer']) && isset($_POST['nom1']))
  2. {
  3. if(file_exists('clients.txt'))
  4. {
  5.  $client_trouve = FALSE;
  6.  $id_file = fopen('clients.txt', 'r');
  7.  flock($id_file, LOCK_SH); // Pose d'un verrou en lecture
  8.  $liste_modif = '';
  9.  while (!feof($id_file)) // Parcourir le fichier tant qu'il n'est pas fini
  10.  {
  11.   $lecture = fgets($id_file, 4096);
  12.   if (preg_match('#^' . preg_quote($_POST['nom1']) . ';#', $lecture))
  13.   {$client_trouve = TRUE;}
  14.   else {$liste_modif .= $lecture;}
  15.  }
  16.  flock($id_file, LOCK_UN); // Libération du verrou
  17.  fclose($id_file);
  18.  $id_file = fopen('clients.txt', 'w+');
  19.  flock($id_file, LOCK_EX); // Pose d'un verrou en écriture
  20.  fwrite($id_file, $liste_modif);
  21.  flock($id_file, LOCK_UN); // Libération du verrou
  22.  fclose($id_file);
  23.  if ($client_trouve)
  24.  {echo '<h2>Client ' . $_POST['nom1'] . '  effacé </h2> ';}
  25.  else {echo '<h2>Aucun client du nom de ' . $_POST['nom1'] . '</h2>';}
  26. }
  27. else {echo "Fichier inaccessible";}
  28. }


Message édité par teycir le 09-02-2007 à 15:26:27

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Manipulation de fichier

 

Sujets relatifs
Recherhce d'une valeur dan un fichier texte[C] Construire un tableau à partir d'un fichier
création d'un fichier batch utilisant xt -> xml+xsl=HTMLanalyser le type d'un fichier en c sous windows
[JAVA] Imprimer un fichier texteManipulation de fichier XML complexe et DataGrid
pb manipulation buffer fichier texteManipulation de fichier *.txt
Petit soucis avec manipulation fichier + chaine de caractères - VB[C++] Manipulation de fichier binaire (help)
Plus de sujets relatifs à : Manipulation de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR