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

Eléphant du PHP | 355 Messages

21 janv. 2006, 03:05

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 ?

Eléphant du PHP | 353 Messages

21 janv. 2006, 09:51

supprimer des lignes de code ? :shock:

Eléphant du PHP | 355 Messages

21 janv. 2006, 10:10

oui

Mammouth du PHP | 19672 Messages

21 janv. 2006, 10:12

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()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 353 Messages

21 janv. 2006, 12:26

une petite question p-e indiscrete , c'est pour faire quoi ?

je vois pas trop l'interet !

Eléphant du PHP | 355 Messages

21 janv. 2006, 13:49

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 ?

Eléphant du PHP | 440 Messages

21 janv. 2006, 14:20

hello ,

ensuite tu peux decoupr ton fichier en ligne avec
explode("\r\n",$contenufichier);
puis reperer les lignes a enlever !
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphant du PHP | 355 Messages

21 janv. 2006, 14:28

Bonjour DarkBlue et merci beaucoup :wink:

Pouriez vous me dire comment reperer les lignes ?

Eléphant du PHP | 440 Messages

21 janv. 2006, 14:34

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 !
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphant du PHP | 355 Messages

21 janv. 2006, 14:37

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 

Mammouth du PHP | 19672 Messages

21 janv. 2006, 14:38

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+"
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, 14:51

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.

Mammouth du PHP | 19672 Messages

21 janv. 2006, 14:54

Est-ce que tu connais le numéro des lignes que tu veux supprimer ?
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, 14:57

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 ?

Eléphant du PHP | 355 Messages

21 janv. 2006, 15:13

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é.