За последние 24 часа нас посетили 19939 программистов и 1711 роботов. Сейчас ищут 1442 программиста ...

Проблема с функциями fgetcsv и implode

Тема в разделе "Вопросы от блондинок", создана пользователем Nickolaich, 2 июн 2008.

  1. Nickolaich

    Nickolaich Активный пользователь

    С нами с:
    29 май 2008
    Сообщения:
    5
    Симпатии:
    0
    Добрый день! С php не знаком совсем! Прошу помощи (заводил такую тему на форуме для новичков - не помогло, так что прошу ногами не бить)! есть код , обрабатывающий строки из текстового файла vygruzka.txt! Привожу строку этого файла:
    45000|300-009|Вешалка для брюк 2-33см|21.6| |5|16.10.05

    С определённого момента(кажется в связи с переходом на php5, но утверждать не могу) после обработки эта строка стала преобразовываться в
    45000|300-009|2-33см|21.6||5|16.10.05
    То есть обрезало "Вешалка для брюк ." И так по каждой строке... обрезает до символа или числа....
    Мне думается что что-то не так с функциями fgetcsv и implode(чисто интуиция). За все дельные советы огромное спасибо!!! Привожу код.

    <?
    $workfile='in/vygruzka.txt';
    $maxllength=256;
    $csvsimbol='|';
    $checksize=7;

    $good='';
    $bad='';
    $gzop=1;//может быть перекрыта переменной $zip

    if(isset($zip))$gzop=0;

    $ignore=array('82-018','82-022','82-036','82-050','82-066','82-080','82-084','82-092','82-097','82-098','82-102','82-180','82-189','86-259');

    //ОБРАБОТКА
    $thread=($gzop==1)?@gzopen($workfile.'.gz','r'):mad:fopen($workfile,'r');
    while(!feof($thread))
    {
    $data=@fgetcsv($thread,$maxllength,$csvsimbol);

    if(is_array($data) && sizeof($data)==$checksize && $data[0]!='' && !in_array($data[1],$ignore))
    {
    $good.=implode($data,$csvsimbol)."\r\n";#ДАННЫЕ ПРИНЯТЫ
    }
    else
    {
    $bad.=implode($data,$csvsimbol)."\r\n";#ДАННЫЕ ОТВЕРГНУТЫ
    }
    }
    fclose($thread);

    //ПЕРЕЗАПИСЬ (В ВЫГРУЗКУ ТЕКСТ)
    $result=fopen($workfile,'w');
    fwrite($result,rtrim($good));
    fclose($result);
    //ПЕРЕЗАПИСЬ (В ВЫГРУЗКУ ТЕКСТ)

    //ВЫВОД ОШИБОК НА ЭКРАН
    echo "Не прошло:\r\n\r\n".$bad;
    echo "\r\nВыгрузка очищена\r\n";

    //===============================nova begin

    //ЧТЕНИЕ НОВА и ПЕРЕЗАПИСЬ ВЫГРУЗКИ
    $rew=file("in/nova.txt"); //ЧТЕНИЕ НОВА

    $rewr=array();
    $countit=0;
    $ech=array();

    //ОБРАБОТКА
    while(list($key,$value)=each($rew))
    {
    $d=trim($value);
    $data=explode(";",$d);
    if(isset($data[1]) && $data[1]!="")
    {
    $rewr[$data[0]]=$data[1];
    }
    }
    //ОБРАБОТКА

    //ОБРАБОТКА ВЫГРУЗКИ
    $read=fopen($workfile,'r');
    while(!feof($read))
    {
    $str1=trim(fgets($read));
    $str=explode("|",$str1);
    if(isset($rewr[$str[1]]))
    {
    $str[6]=$rewr[$str[1]];
    }
    array_push($ech,trim(implode($str,'|')));
    }
    fclose($read);
    //ОБРАБОТКА ВЫГРУЗКИ

    //ПЕРЕЗАПИСЬ ВЫГРУЗКИ
    $rdy=fopen($workfile,'w');
    $rez=implode($ech,"\r\n");
    fwrite($rdy,$rez);
    fclose($rdy);

    echo "\r\nДанные NOVA внесены\r\n";
    echo "\r\nВыгрузка перезаписана\r\n";
    ?>
     
  2. Nickolaich

    Nickolaich Активный пользователь

    С нами с:
    29 май 2008
    Сообщения:
    5
    Симпатии:
    0