You are here

testDataFileIterator.php in Loft Data Grids 7.2

Same filename and directory in other branches
  1. 6.2 vendor/phpoffice/phpexcel/unitTests/testDataFileIterator.php

File

vendor/phpoffice/phpexcel/unitTests/testDataFileIterator.php
View source
<?php

class testDataFileIterator implements Iterator {
  protected $file;
  protected $key = 0;
  protected $current;
  public function __construct($file) {
    $this->file = fopen($file, 'r');
  }
  public function __destruct() {
    fclose($this->file);
  }
  public function rewind() {
    rewind($this->file);
    $this->current = $this
      ->_parseNextDataset();
    $this->key = 0;
  }
  public function valid() {
    return !feof($this->file);
  }
  public function key() {
    return $this->key;
  }
  public function current() {
    return $this->current;
  }
  public function next() {
    $this->current = $this
      ->_parseNextDataset();
    $this->key++;
  }
  private function _parseNextDataset() {

    //    Read a line of test data from the file
    do {

      //    Only take lines that contain test data and that aren't commented out
      $testDataRow = trim(fgets($this->file));
    } while ($testDataRow > '' && $testDataRow[0] === '#');

    //    Discard any comments at the end of the line
    list($testData) = explode('//', $testDataRow);

    //    Split data into an array of individual values and a result
    $dataSet = $this
      ->_getcsv($testData, ',', "'");
    foreach ($dataSet as &$dataValue) {
      $dataValue = $this
        ->_parseDataValue($dataValue);
    }
    unset($dataValue);
    return $dataSet;
  }
  private function _getcsv($input, $delimiter, $enclosure) {
    if (function_exists('str_getcsv')) {
      return str_getcsv($input, $delimiter, $enclosure);
    }
    $temp = fopen('php://memory', 'rw');
    fwrite($temp, $input);
    rewind($temp);
    $data = fgetcsv($temp, strlen($input), $delimiter, $enclosure);
    fclose($temp);
    if ($data === false) {
      $data = array(
        null,
      );
    }
    return $data;
  }
  private function _parseDataValue($dataValue) {

    //    discard any white space
    $dataValue = trim($dataValue);

    //    test for the required datatype and convert accordingly
    if (!is_numeric($dataValue)) {
      if ($dataValue == '') {
        $dataValue = NULL;
      }
      elseif ($dataValue == '""') {
        $dataValue = '';
      }
      elseif ($dataValue[0] == '"' && $dataValue[strlen($dataValue) - 1] == '"') {
        $dataValue = substr($dataValue, 1, -1);
      }
      elseif ($dataValue[0] == '{' && $dataValue[strlen($dataValue) - 1] == '}') {
        $dataValue = explode(';', substr($dataValue, 1, -1));
        foreach ($dataValue as &$dataRow) {
          if (strpos($dataRow, '|') !== FALSE) {
            $dataRow = explode('|', $dataRow);
            foreach ($dataRow as &$dataCell) {
              $dataCell = $this
                ->_parseDataValue($dataCell);
            }
            unset($dataCell);
          }
          else {
            $dataRow = $this
              ->_parseDataValue($dataRow);
          }
        }
        unset($dataRow);
      }
      else {
        switch (strtoupper($dataValue)) {
          case 'NULL':
            $dataValue = NULL;
            break;
          case 'TRUE':
            $dataValue = TRUE;
            break;
          case 'FALSE':
            $dataValue = FALSE;
            break;
        }
      }
    }
    else {
      if (strpos($dataValue, '.') !== FALSE) {
        $dataValue = (double) $dataValue;
      }
      else {
        $dataValue = (int) $dataValue;
      }
    }
    return $dataValue;
  }

}

Classes