PHP чтение и изменение csv

Discussion in 'PHP' started by chical, 24 Aug 2017.

  1. chical

    chical New Member

    Joined:
    10 Apr 2013
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, прошу помощи в записи 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);

    ?>

     
  2. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
  3. Veil

    Veil Banned

    Joined:
    21 May 2015
    Messages:
    2,020
    Likes Received:
    3,349
    Reputations:
    72
    Этот пых уже достал.Между делом захожу к"Богам" к нашим сисам. На меня смотрят как на папуаса.Задаю вопрос , сразу взгляд меняется.Потом становится еще хлеще, на мой приход - все заняты... А вопрос тот же пых. У нас спец на пыхе пыхом не владеет. Вот и весь ответ.
     
  4. VKAPI

    VKAPI Member

    Joined:
    25 Nov 2011
    Messages:
    142
    Likes Received:
    68
    Reputations:
    0
    чио ты хотел, это же сетевые черви..
     
    Veil likes this.
  5. spiner

    spiner Member

    Joined:
    8 Jul 2015
    Messages:
    74
    Likes Received:
    56
    Reputations:
    4
    fgets возвращает строку с символом переноса строки в конце (\n), соответственно он при explode попадает в $a[6] и когда вы значение меняете, то его не указываете. вам правильно подсказали использовать fgetcsc и fputcsv для работы с CSV, но если не хотите заморачиваться, то просто после чтения строки перед explode отбоасывайте этот символ с помощью trim ($s = trim($s);), а перед записью в файл после implode добавляйте его fputs($r, implode(';', $a) . "\n"));
    п.с. прошу прощения зо возможные ошибки, пишу с телефона, потому код проверяйте, суть я описал