Класс для ручной разборки и сохранения CSV файлов

16.11.2015

Демонстрация того, как можно "руками" разобрать CSV файл. Практической пользы не имеет, но по его примеру можно обрабатывать и другие форматы.

csv.php (Download)

 <?
  class c_csv
  {
    var $_data					= '';  ///свойство   было =NULL;
    var $_bSkipFirstLine		= false;
    var $_FileName 				= '';

    function c_csv($FileName) ///метод
    {
      $this->_FileName = $FileName;
    }

    function Load()
    {
      $this->_data = file($this->_FileName);  //возвращает одномерный массив просто из строк

      $lines = array();       // временная переменная массива  (чистая тетрадка)
      $i = 0;
      foreach($this->_data as $line) //исписанная тетрадка as страница в исписанной тетрадке
      {
        if ($this->_bSkipFirstLine == true AND $i==0)
        {
          // do nothing
        }
        else
        {
          $lines[$i] = explode (";" ,  $line )  ;      // присвоение, возвращает массив в массиве (взяли страницу чистой тетрадки и записали туда значения из аналогичной страницы исписанной тетрадки)
        }
        $i++;
      }

      $this->_data = $lines;
    }

    function Save()
    {

       $lines = array();   //моя новая исписанная тетрадка, мой журнал в деканате.
       $i = 0;
       foreach ($this->_data as $mine) //беру свою тетрадку и перебираю как мне нравится
       {
         $lines[$i] = implode(";", $mine); //беру свою исписанную тетрадку и записываю в журнал в деканате
         $i++;
       }

//      $this->_data = implode("", $lines); /// изменённую тетрадку превращаю в строку
      $this->_data = implode("\n", $lines); /// изменённую тетрадку превращаю в строку
      $sContent = $this->_data; /// новой переменной присваиваю єту строку
      //$sContent = implode("", $this->_data);

      if (!$handle = fopen($this->_FileName, 'w+'))
      {
        die('Не могу открыть файл ('.$this->_FileName.')');
      }

      if (fwrite($handle, $sContent) === FALSE)
      {
        die('Не могу произвести запись в файл ('.$this->_FileName.')');
      }

      fclose($handle);
    }

    function GetAsArray()
    {
      return $this->_data;

	    // echo '<pre>';
		//print_r($lines);                   // Вывод полученного результата
		//echo '</pre>';
    }

    function SetAsArray($Array)
    {
       $this->_data = $Array;
        //echo '<pre>';
		//print_r($this->_data);                   // Вывод полученного результата
		//echo '</pre>';
    }

    function setSkipFirstLine($value)
    {
      $this->_bSkipFirstLine = $value;
    }

    function Demo()
    {
      $oCSV = new c_csv('test.csv'); //можно вызывать сразу этот файл, еси есть конструктор

      //$oCSV->Create('test.csv');
      $oCSV->setSkipFirstLine(true);
      $oCSV->Load();

      //$oCSV->GetAsArray();
      $aResult = $oCSV->GetAsArray();

      //print_r ($aResult[1][2]); //первая хрень - один массив, к нему обращаюсь, вторая хрень - это уже внутри массива

      $aResult[1][2] = '999'; ///поменяли значение , в массиве он уже изменён

      // print_r ($aResult);

      $oCSV->SetAsArray($aResult); //вызов метода
      $oCSV->Save();
    }
  }
?>

Яндекс.Метрика