Supprimer des lignes précises par leurs numéros dans un fich

Eléphant du PHP | 355 Messages

21 janv. 2006, 15:21

Voila les erreurs:

Code : Tout sélectionner

Warning: fread(): Length parameter must be greater than 0. in h:\www\untitled-2.php on line 4 Notice: Undefined variable: tableau in h:\www\untitled-2.php on line 6 Notice: Undefined variable: tableau in h:\www\untitled-2.php on line 7 Notice: Undefined variable: tableau in h:\www\untitled-2.php on line 8 Warning: Wrong parameter count for fwrite() in h:\www\untitled-2.php on line 10

Mammouth du PHP | 19672 Messages

21 janv. 2006, 15:31

Il faut utiliser une boucle. à la suite du code de tout à l'heure, essaye ceci:
<?php
/* On va ré-écrire le fichier en sautant les lignes 5, 6 et 7 */
$suppr = array(5, 6, 7);
$nouveau = "";
for($i = 0; $i < count($tableau); $i++)
{
    $j = $i+1;
    if(!in_array($j, $suppr))
    {
        $nouveau .= $tableau[$i];
    }
}
/* Maintenant, on peut ré-écrire le fichier : */
$fichier = "texte2.txt";
$ouvre = fopen($fichier, "w");
fwrite($ouvre, $nouveau);
fclose($ouvre);
?>
Note une chose: j'utilise un autre nom de fichier juste pour pas écraser l'original, mais tu peux aussi bien refaire avec l'original, ça fonctionnera aussi bien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 355 Messages

21 janv. 2006, 15:46

J'ai donc adapter mon coce comme ceci:
<?php 
$suppr = array(5, 6, 7); 
$nouveau = ""; 
for($i = 0; $i < count($tableau); $i++) 
{ 
    $j = $i+1; 
    if(!in_array($j, $suppr)) 
    { 
        $nouveau .= $tableau[$i]; 
    } 
} 
$filename = "fichier.php"; // On créer la variable du nom du fichier à traiter 
$ouvre = fopen($filename, "w"); 
fwrite($ouvre, $nouveau); 
fclose($ouvre);

?> 
<pre> 
<?php 
var_dump($tableau); // ?
?> 
</pre>
Mais le fichier est toujours completement vidé.

Eléphant du PHP | 355 Messages

21 janv. 2006, 15:47

Code : Tout sélectionner

$nouveau = "";
Représente quoi ?

Mammouth du PHP | 19672 Messages

21 janv. 2006, 15:50

Il doit y avoir une erreur dans ton adaptation: voici le code complet que j'ai utilisé:
<?php
// Lit un fichier, et le place dans une chaîne
$filename = "texte.txt";
$handle   = fopen ($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$tableau  = explode("\n", $contents);

/* Affichons le résultat */
?>
<pre>
<?php
var_dump($tableau);
?>
</pre>
<?php
/* On va ré-écrire le fichier en sautant les lignes 5, 6 et 7 */
$suppr = array(5, 6, 7);
$nouveau = "";
for($i = 0; $i < count($tableau); $i++)
{
    $j = $i+1;
    if(!in_array($j, $suppr))
    {
        $nouveau .= $tableau[$i];
    }
}
/* Maintenant, on peut ré-écrire le fichier : */
$fichier = "texte2.txt";
$ouvre = fopen($fichier, "w");
fwrite($ouvre, $nouveau);
fclose($ouvre);
?>
J'ai donc deux fichiers comme je t'ai expliqué dans ma précédente réponse. Essaye comme ça et quand ça fonctionnera, remplace le second fichier en mettant le même que le premier pour le ré-écrire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 355 Messages

21 janv. 2006, 16:05

Merci beaucoup :wink:

Donc voila le code qui fonctionne:
<?php 
$filename = "fichier.php"; // On créer la variable vers le fichier à traiter
$handle = fopen ($filename, "r"); // On ouvre le fichier défini par le variable
$contents = fread ($handle, filesize ($filename)); // ?
fclose ($handle); // On ferme le fichier
$tableau = explode("\n", $contents); // ?
?> 
<pre> 
<?php 
var_dump($tableau); // ?
?> 
</pre> 
<?php 
$suppr = array(5, 6, 7);  // On défini les lignes à supprimer
$nouveau = ""; 
for($i = 0; $i < count($tableau); $i++) 
{ 
    $j = $i+1; 
    if(!in_array($j, $suppr)) 
    { 
        $nouveau .= $tableau[$i]; 
    } 
} 
$ouvre = fopen($filename, "w"); // On ouvre le fichier défini par le variable
fwrite($ouvre, $nouveau);  // On réécrit le fichier sur lui même
fclose($ouvre);  // On ferme le fichier
?> 
Pouriez vous m'aider a finaliser les commantaire, la ou il y a // ? ?

Mammouth du PHP | 19672 Messages

21 janv. 2006, 16:18

<?php
/* On créer la variable vers le fichier à traiter */
$filename = "fichier.php";
/* On ouvre le fichier défini par le variable */
$handle = fopen ($filename, "r");
/* On stocke le contenu du ficher dans une variable */
$contents = fread ($handle, filesize ($filename));
/* On ferme le fichier */
fclose ($handle);
/* On récupère chaque ligne du fichier en cherchant le séparateur "saut-de-ligne" (\n) */
$tableau = explode("\n", $contents);
?>
<pre>
<?php
/* On affiche le contenu du tableau à l'écran en utilisant les balises <pre> pour une mise en forme lisible */
var_dump($tableau);
?>
</pre>
<?php
/* On défini les lignes à supprimer */
$suppr = array(5, 6, 7);
$nouveau = "";
for($i = 0; $i < count($tableau); $i++)
{
    $j = $i+1;
    if(!in_array($j, $suppr))
    {
        $nouveau .= $tableau[$i];
    }
}
/* On ouvre le fichier défini par le variable */
$ouvre = fopen($filename, "w");
/* On réécrit le fichier sur lui même */
fwrite($ouvre, $nouveau); 
/* On ferme le fichier */
fclose($ouvre);
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 355 Messages

21 janv. 2006, 16:23

Merci beaucoup pour votre patience :wink: :)