/** * 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]; } }
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; }
public function testReader() { $reader = new FileReader(__DIR__ . '/data/error.log'); $reader->next(); $this->assertTrue($reader->valid()); $this->assertEquals('Stack trace:', $reader->consumeLine(10)); }