示例#1
0
 /**
  * Parses the constant values from GROUP 1040 and 1041
  *
  * @param FileReader $file
  */
 protected function parseGroup1040and1041(FileReader $file)
 {
     $coeffNames = [];
     $coeffValues = [];
     // Seek to start of GROUP 1040, and store the total number of constants
     $file->seek(14);
     $count = (int) trim($file->current());
     // Parse each constant header
     $i = 0;
     while ($i < $count) {
         $file->next();
         foreach ($file->splitCurrent(' ') as $coeff) {
             $coeffNames[] = $coeff;
             $i++;
         }
     }
     // Seek to the begining of GROUP 1041
     $file->seek(18 + ceil($count / 10));
     // Parse each constant value
     $i = 0;
     while ($i < $count) {
         $file->next();
         foreach ($file->splitCurrent(' ') as $value) {
             $coeffValues[] = static::evalNumber($value);
             $i++;
         }
     }
     // Create a new constant instance and store each of the coefficients
     $this->const = new Constant();
     for ($i = 0; $i < count($coeffNames); $i++) {
         $this->const->{$coeffNames[$i]} = $coeffValues[$i];
     }
 }
示例#2
0
 public function parseSpline(FileReader $iter, $matrix)
 {
     $line = $iter->current();
     echo "New Spline: " . $iter->key() . "\n";
     $d = preg_split('/\\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);
     $total = $d[13];
     echo "Parsing {$total} points\n";
     $count = 0;
     $points = array();
     $state = 1;
     // fetch points
     $iter->next();
     // advance to next line
     foreach ($iter as $line) {
         $d = preg_split('/\\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);
         //echo implode(",",$d)."\n";
         switch ($state) {
             case 1:
                 $points[] = transformPoint($matrix, (object) array('x' => $d[0], 'y' => $d[1]));
                 ++$count;
                 if ($count == $total) {
                     $state = 2;
                     $count = 0;
                 }
                 break;
             case 2:
                 $count += count($d);
                 if ($count >= $total) {
                     break 2;
                 }
                 break;
         }
     }
     // finished spline
     echo "Ending Spline: " . $iter->key() . "\n";
     return $points;
 }
示例#3
-1
 public function testReader()
 {
     $reader = new FileReader(__DIR__ . '/data/error.log');
     $reader->next();
     $this->assertTrue($reader->valid());
     $this->assertEquals('Stack trace:', $reader->consumeLine(10));
 }