Здравствуйте, прошу помощи в записи csv файла. Значит есть значения в файле csv с разделителями такого типа: Code: id;P1_1;P1_2;P1_3;P2_1;P2_2;P2_3 5445;1;0;1;0;1;0 4923;0;1;1;0;0;1 Задача которую надо сделать: - Если в P1_1 появляется "0" то в P2_1 поле должно быть заменено на пустое значение " ", если появляется другое значение(в данном случае "1") то надо оставить оригинальное значение. Также само и при P1_2;P1_3 = 0 - P2_2;P2_3 должны стать пустыми " ". Вроде все делаю правильно но вылазит какой-то косяк при замене в P2_3 на пустое значение, как будто пропадает перенос строки. Мой код: PHP: <?php$ident='0';$f=fopen("file.csv","r");$r=fopen("file_mod.csv","w");while (!feof($f)) {$s=fgets($f);$a=explode(";",$s);if ($a[1]==$ident) $a[4]=' ';if ($a[2]==$ident) $a[5]=' ';if ($a[3]==$ident) $a[6]=' '; // здесь начинаются проблемы fputs($r,implode(";",$a));}fclose($f);fclose($r);?>
Для работы с .csv файлами есть специальные функции: http://php.net/manual/ru/function.fgetcsv.php http://php.net/manual/ru/function.fputcsv.php
Этот пых уже достал.Между делом захожу к"Богам" к нашим сисам. На меня смотрят как на папуаса.Задаю вопрос , сразу взгляд меняется.Потом становится еще хлеще, на мой приход - все заняты... А вопрос тот же пых. У нас спец на пыхе пыхом не владеет. Вот и весь ответ.
fgets возвращает строку с символом переноса строки в конце (\n), соответственно он при explode попадает в $a[6] и когда вы значение меняете, то его не указываете. вам правильно подсказали использовать fgetcsc и fputcsv для работы с CSV, но если не хотите заморачиваться, то просто после чтения строки перед explode отбоасывайте этот символ с помощью trim ($s = trim($s), а перед записью в файл после implode добавляйте его fputs($r, implode(';', $a) . "\n")); п.с. прошу прощения зо возможные ошибки, пишу с телефона, потому код проверяйте, суть я описал