diff --git a/src/file/csv/CsvReader.php b/src/file/csv/CsvReader.php index 5ea0c8b..7177a80 100644 --- a/src/file/csv/CsvReader.php +++ b/src/file/csv/CsvReader.php @@ -4,6 +4,8 @@ namespace nur\sery\file\csv; use nur\sery\file\FileReader; class CsvReader extends AbstractReader { + use TAbstractReader; + function getIterator() { $reader = new FileReader($this->input); while (($row = $reader->fgetcsv()) !== null) { diff --git a/src/file/csv/IReader.php b/src/file/csv/IReader.php index c944aad..99fa5d3 100644 --- a/src/file/csv/IReader.php +++ b/src/file/csv/IReader.php @@ -3,5 +3,5 @@ namespace nur\sery\file\csv; use IteratorAggregate; -interface IReader extends IteratorAggregate { +interface IReader extends IteratorAggregate { } diff --git a/src/file/csv/SsReader.php b/src/file/csv/SsReader.php index 151b971..0321b83 100644 --- a/src/file/csv/SsReader.php +++ b/src/file/csv/SsReader.php @@ -11,13 +11,7 @@ use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\RichText\RichText; class SsReader extends AbstractReader { - static function with(Upload $upload): IReader { - if ($upload->isExt(".csv")) { - return new CsvReader($upload->tmpName); - } else { - return new static($upload->tmpName); - } - } + use TAbstractReader; const DATETIME_FORMAT = 'dd/mm/yyyy hh:mm:ss'; const DATE_FORMAT = 'dd/mm/yyyy'; @@ -66,6 +60,11 @@ class SsReader extends AbstractReader { protected ?string $wsname; + function setWsname(?string $wsname): self { + $this->wsname = $wsname; + return $this; + } + function getIterator() { $ss = IOFactory::load($this->input); $ws = wsutils::get_ws($this->wsname, $ss); diff --git a/src/file/csv/TAbstractReader.php b/src/file/csv/TAbstractReader.php new file mode 100644 index 0000000..40345fb --- /dev/null +++ b/src/file/csv/TAbstractReader.php @@ -0,0 +1,29 @@ +isExt(".csv")) $class = CsvReader::class; + else $class = static::class; + return $class($reader->tmpName); + } + if (is_string($reader)) $reader = ["input" => $reader]; + if (!is_array($reader)) { + throw ValueException::invalid_type($reader, self::class); + } + $input = $reader["input"] ?? null; + if (is_string($input) && path::ext($input) === ".csv") { + $class = CsvReader::class; + } + if ($class === null) $class = static::class; + return $class($reader); + } +}