Page 1 sur 2

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

Posté : 21 janv. 2006, 03:05
par phpdog
Bonjour à tous :wink:

J’ai besoin de créer un script php qui permette de supprimer des lignes précises par leurs numéros dans un fichier.php, par exemple les lignes 45 46 47 48 49 50 51 52, quelqu’un pourrait-il m’aiguiller vers un bon tutorial ?

Posté : 21 janv. 2006, 09:51
par Tictac
supprimer des lignes de code ? :shock:

Posté : 21 janv. 2006, 10:10
par phpdog
oui

Posté : 21 janv. 2006, 10:12
par Cyrano
Pour faire ça, il faut lire le fichier et stocker chaque ligne dans un tableau et par la suite ré-écrire le fichier à l'exception des lignes que tu veux supprimer.

Explore fread()

Posté : 21 janv. 2006, 12:26
par Tictac
une petite question p-e indiscrete , c'est pour faire quoi ?

je vois pas trop l'interet !

Posté : 21 janv. 2006, 13:49
par phpdog
Merci encore cyrano :wink:

Donc je part avec sa:
<?php
// Lit un fichier, et le place dans une chaîne
$filename = "fichier.txt";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);
?> 
Mais je ne vooie pas comment faire, pouriez vous m'aider ?

Posté : 21 janv. 2006, 14:20
par DarkBlue
hello ,

ensuite tu peux decoupr ton fichier en ligne avec
explode("\r\n",$contenufichier);
puis reperer les lignes a enlever !

Posté : 21 janv. 2006, 14:28
par phpdog
Bonjour DarkBlue et merci beaucoup :wink:

Pouriez vous me dire comment reperer les lignes ?

Posté : 21 janv. 2006, 14:34
par DarkBlue
c est tres simple , une fois le explode fais via par exmple :
$ligne=explode("\r\n",$contenufichier); 
les lignes sont repérées ainsi :
$ligne[0] ; // envoi la ligne 1
$ligne[1] ; // envoi la ligne 2
$ligne[2] ; // envoi la ligne 3
et ainsi de suite !

Posté : 21 janv. 2006, 14:37
par phpdog
Et sa s'est pour supprimer les lignes alors ?
$ligne[0] ; // envoi la ligne 1 
$ligne[1] ; // envoi la ligne 2 
$ligne[2] ; // envoi la ligne 3 

Posté : 21 janv. 2006, 14:38
par Cyrano
Bon, si tu affiche le contenu, tu vas avoir tout le contenu sans réelles séparations entre les lignes.

Tu peux séparer les lignes et enregistrer tout ça dans un tableau indexé de la manière suivante. Imaginons un fichier texte comme ceci:
Ligne de texte 01
Ligne de texte 02
Ligne de texte 03
Ligne de texte 04
Ligne de texte 05
Ligne de texte 06
Ligne de texte 07
Ligne de texte 08
Ligne de texte 09
Ligne de texte 10
Ligne de texte 11
Ligne de texte 12
Ligne de texte 13
Ligne de texte 14
Ligne de texte 15
Ligne de texte 16
Ligne de texte 17
Ligne de texte 18
Ligne de texte 19
Ligne de texte 20
Ligne de texte 21
Ligne de texte 22
Ligne de texte 23
Ligne de texte 24
Ligne de texte 25
Ligne de texte 26
Ligne de texte 27
Ligne de texte 28
Ligne de texte 29
Ligne de texte 30
Rien de transcendant. Maintenant, reprennons ton code et ajoutons-y quelques détails:
<?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);
?>
<pre>
<?php
var_dump($tableau);
?>
</pre>
À l'affichage, tu vas voir ceci:

Code : Tout sélectionner

array(31) { [0]=> string(18) "Ligne de texte 01 " [1]=> string(18) "Ligne de texte 02 " [2]=> string(18) "Ligne de texte 03 " [3]=> string(18) "Ligne de texte 04 " [4]=> string(18) "Ligne de texte 05 " [5]=> string(18) "Ligne de texte 06 " [6]=> string(18) "Ligne de texte 07 " [7]=> string(18) "Ligne de texte 08 " [8]=> string(18) "Ligne de texte 09 " [9]=> string(18) "Ligne de texte 10 " [10]=> string(18) "Ligne de texte 11 " [11]=> string(18) "Ligne de texte 12 " [12]=> string(18) "Ligne de texte 13 " [13]=> string(18) "Ligne de texte 14 " [14]=> string(18) "Ligne de texte 15 " [15]=> string(18) "Ligne de texte 16 " [16]=> string(18) "Ligne de texte 17 " [17]=> string(18) "Ligne de texte 18 " [18]=> string(18) "Ligne de texte 19 " [19]=> string(18) "Ligne de texte 20 " [20]=> string(18) "Ligne de texte 21 " [21]=> string(18) "Ligne de texte 22 " [22]=> string(18) "Ligne de texte 23 " [23]=> string(18) "Ligne de texte 24 " [24]=> string(18) "Ligne de texte 25 " [25]=> string(18) "Ligne de texte 26 " [26]=> string(18) "Ligne de texte 27 " [27]=> string(18) "Ligne de texte 28 " [28]=> string(18) "Ligne de texte 29 " [29]=> string(18) "Ligne de texte 30" }
Comme tu peux voir, chaque ligne est isolée : attention cependant à un détail: les index de $tableau commencent à 0 pour la ligne 1 du fichier.

Il te reste donc maintenant à définir quelles lignes tu veux supprimer et à créer une boucle pour créer le contenu du nouveau fichier en sautant les lignes à supprimer: puis tu ré-écris le fichier avec fwrite() en écrasant l'ancien. Il faudra pour celà l'ouvrir non pas en mode "r" mais "w" ou "w+"

Posté : 21 janv. 2006, 14:51
par phpdog
Merci encore :wink:

Donc j'en suis la:
<?php 
$filename = "fichier.php"; 

$handle = fopen ($filename, "w"); 
$contents = fread ($handle, filesize ($filename)); 
fclose ($handle); 
$tableau = explode("\n", $contents); 
fwrite($filename);
?> 
<pre> 
<?php 
var_dump($tableau); 
?> 
</pre> 
Ce code vide completement le fichier, se que je ne voie pas s'est coment définir les lignes a supprimer.

Posté : 21 janv. 2006, 14:54
par Cyrano
Est-ce que tu connais le numéro des lignes que tu veux supprimer ?

Posté : 21 janv. 2006, 14:57
par phpdog
Oui 5 6 et 7

Se que je ne pige pas aussi s'est: Doije supprimer les lignes 5 6 et 7 ou récupérer toutes les autres ?

Posté : 21 janv. 2006, 15:13
par phpdog
J'ai essayer ceci:
<?php 
$filename = "fichier.php"; // On créer la variable du nom du fichier à traiter
$handle = fopen ($filename, "w"); // On ouvre le fichier défini par le variable
$contents = fread ($handle, filesize ($filename)); // ?
fclose ($handle); // On ferme le fichier
$tableau[5] ;
$tableau[6] ;
$tableau[7] ;
$tableau = explode("\n", $contents); // ?
fwrite($filename); // On réécrit le fichier sur lui même
?> 
<pre> 
<?php 
var_dump($tableau); // ?
?> 
</pre>
Le fichier est completement vidé.