2017-09-22 14 views
0

Je veux supprimer la ligne d'itération courante du fichier CSV, Supposons que j'ai 5 lignes (1,2,3,4,5) dans mon fichier CSV, j'ai ouvert mon fichier lors de l'itération des lignes une par une en utilisant foreach, quand il s'agit de la 3e rangée puis la 3e rangée doit être supprimée du fichier CSV et les autres lignes 1,2,4,5 seront identiques tout en même itération. Je ne veux pas utiliser comme Passer la 3ème itération et l'enregistrer dans un autre fichier, pas comme renommer le nom du fichier. Donc, s'il vous plaît, n'importe qui peut m'aider à faire cela en PHP?Supprimer la ligne d'itération courante du fichier CSV dans PHP

Supposons, comme commande SQL pour supprimer la ligne courante, y at-il quelque chose en PHP?

Merci.

+0

Lire fichier dans un tableau, unset la ligne et l'écrire de nouveau – SubjectDelta

+0

Pourquoi êtes-vous contre la lecture du fichier et de l'écriture un nouveau fichier moins les lignes que vous vouliez supprimer? Vous devriez éviter les problèmes de mémoire de cette façon lorsque vous travaillez avec des fichiers plus volumineux. – X33

+0

Le meilleur moyen devrait faire une sauvegarde du fichier, le lire et écrire des modifications dans le premier. Tous heureux! – SubjectDelta

Répondre

0

Vous devez disposer des autorisations pour écrire le fichier. Si vous supprimez une ligne, vous devrez enregistrer le fichier. Comme vous ne voulez pas avoir de lignes vides, vous devez lire tout le fichier.

Je suggère d'obtenir le contenu du fichier, et le diviser en un tableau par des lignes. Avec la fonction exploser, vous pouvez diviser le contenu par le saut de ligne, très probablement "\ n". Donc un tableau qui contiendra chaque ligne du fichier csv sera existant. Maintenant, vous pouvez simplement supprimer la ligne du tableau et en créer une chaîne, avant de sauvegarder le contenu modifié dans le fichier csv.

// get csv content into string variable 
$csvContent = file_get_contents(__DIR__ . "/yourfile.csv"); 
// create array out of csv, limited by PHP_EOL wich determines the systems line break 
// this means, every line in the csv file will be represended by an array key and its value 
$csvArray = explode(PHP_EOL, $csvContent); 

// unset the 3th csv line. 
unset($csvArray[2]); // keep in mind array starts at 0, so third line is array key 2 

// from here on you can manipulate the array $csvArray as you like. 
// add lines, remove lines or just use the given content for future operations. 
// you can also iterate over the array with: foreach ($csvArray as $line => $value) {} 

// create string out of modified csv array 
$csvContent = implode(PHP_EOL, $csvArray); 
// save result back into the csv file 
file_put_contents(__DIR__ . "/yourfile.csv", $csvContent); 

Vérification de fonction implode/exploser php docs:

http://php.net/manual/en/function.implode.php

http://php.net/manual/en/function.explode.php

+0

Mieux vaut utiliser [PHP_EOL] (http://php.net/manual/fr/reserved.constants.php#constant.php-eol) comme fin de ligne – SubjectDelta

+0

@natheriel je veux supprimer ma 3ème ligne avant d'itérer la 4ème et 5ème rangée selon mes exigences. Alors est-ce possible? – Naveen

+0

Bon point, le code a changé pour utiliser PHP_EOL – natheriel