8
votes

Supprimer la ligne du fichier csv

J'ai un fichier .csv avec 4 colonnes. Quel est le moyen le plus simple de supprimer une ligne identique à l'ID de la première colonne? Voici où j'ai été coincé: xxx

Malheureusement, des bases de données n'étaient pas un choix.


0 commentaires

4 Réponses :


1
votes
$id = $_GET['id'];
if($id) {
    $file_handle = fopen("testimonials.csv", "w+");
    $myCsv = array();
    while (!feof($file_handle) ) {
        $line_of_text = fgetcsv($file_handle, 1024);    
        if ($id != $line_of_text[0]) {
            fputcsv($file_handle, $line_of_text);
        }
    }
    fclose($file_handle);
}

1 commentaires

Vous oubliez la partie où vous écrivez la matrice CSV à un autre fichier. Vous ne voulez pas non plus stocker tout le CSV dans un tableau car cela pourrait entraîner des erreurs de mémoire. Mieux vaut écrire de manière progressive le CSV.



0
votes

Vous pouvez faire:

$new = '';
while (!feof($file_handle))
{
    $line_of_text = fgetcsv($file_handle, 1024);    
    if ($id != $line_of_text[0])
    {
         $new .= implode(',',$line_of_text) . PHP_EOL;
    }
}


0 commentaires

2
votes

J'ai récemment fait une chose similaire pour une newsletter désassonnée, voici mon code: xxx

Ceci utilise la méthode du fichier temporaire d'écriture de la ligne CSV par ligne pour éviter les erreurs de mémoire. Ensuite, une fois que le nouveau fichier créé, il supprime l'original et renomme le fichier Temp.

Vous pouvez modifier ce code afin qu'il recherche un identifiant au lieu d'une adresse électronique, par exemple: < Pré> xxx


0 commentaires

7
votes
$table = fopen('table.csv','r');
$temp_table = fopen('table_temp.csv','w');

$id = 'something' // the name of the column you're looking for

while (($data = fgetcsv($table, 1000)) !== FALSE){
    if(reset($data) == $id){ // this is if you need the first column in a row
        continue;
    }
    fputcsv($temp_table,$data);
}
fclose($table);
fclose($temp_table);
rename('table_temp.csv','table.csv');

0 commentaires