Удалить повторы в файле CSV php

#php #csv

#php #csv

Вопрос:

у меня есть файл CSV, подобный приведенному ниже примеру.

 SAT1002569,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,,15
SAT1002566,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,g,15
SAT1002567,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,h,15
SAT1002568,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,i,15
SAT1002569,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,g,15
SAT1002571,1,questavienedagestione,3,4,5,6,7,8,9,10,11,12,13,,15
  

Я должен создать php-скрипт, который сначала должен найти строки, в которых первое поле совпадает
(значение SAT). Если он находит две строки с одинаковым первым полем, необходимо перейти и проверить, какое
из двух имеет пятнадцатое поле пустым и должен отменить.
Затем он должен оставить записанный с пятнадцатым полным полем.

 <?php
 $RigheFileDefinitivo = explode("n", file_get_contents("File csv/".$date.".csv")); 

    //mi ciclio il file eccomiquacisono.csv e creo un array con numero riga e contenuto riga
    foreach($RigheFileDefinitivo as $num=>$riga)
    {
        //spezzo ogni riga del file in base ad un delimitatore ovvero la ","
        $campi = explode(",", $riga);

        //dico che il contenuto numero 14 dell'array (ovvero della riga) è la data
        $NrSat = $campi[0];
        $Delimitatore = $campi[15];
        foreach($RigheFileDefinitivo as $num=>$riga)
        {
                $campi = explode(",", $riga);
                $NrSat2 = $campi[0];
                $Delimitatore = $campi[15];
                if($NrSat == $NrSat2 amp;amp; $Delimitatore == ""  )
                {
                    unset($RigheFileDefinitivo[$num]);

                }
        }
    }
    file_put_contents("File csv/".$date.".csv", join("n",$RigheFileDefinitivo));
    fclose($handle);

?>
  

Я пытался создать скрипт, но не работает. Надеюсь, я хорошо объяснил свою проблему. Помогите мне
Ниже я опубликую сценарий, который я написал

Ответ №1:

Используйте freadcsv и fputcsv . Смотрите комментарии в коде

 if (($handle = fopen("test.csv", "r")) !== FALSE) {

    $rows = array(); //indexed by SAT value

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {                        
        if(isset($rows[$data[0]])) { 
            //if we've seen the SAT value before, 
            //keep the row with the non-empty 16th column
            if(empty($rows[$data[0]][15]) amp;amp; !empty($data[15])) {
                $rows[$data[0]] = $data;
            }
        }
        else {
            //if this is the 1st time we've seen the SAT value, 
            //add it to the row as is
            $rows[$data[0]] = $data;
        }            
    }

    fclose($handle);

    //write rows to csv
    $fp = fopen('new.csv', 'w');

    foreach ($rows as $row) {
        //there still may be rows with an empty 16th column
        //for example if the csv contains a single SAT value with an empty 16th column
        //if you want to exclude these use an if statement here
        //if(!empty($row[15]))
        fputcsv($fp, $row);
    }

    fclose($fp);    
}
  

Комментарии:

1. Извините, я не понимаю. Я могу использовать этот код или я должен что-то сделать? Спасибо!

2. Это не работает. Не могли бы вы, пожалуйста, написать мне правильную версию?

3. Ошибка синтаксического анализа: неожиданная ошибка ‘[‘ в /membri/sat3/Secondo Progetto/ScriptMovetoCumulatoCc.php в строке 105