#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