From 03e85ffc21c15ed22096423e8a285741f064a12f Mon Sep 17 00:00:00 2001 From: Sebastian Fichera Date: Thu, 11 Feb 2016 17:12:54 -0600 Subject: [PATCH] Added EOL configuration support while reading CSV files... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhancement for #172 issue… --- src/Spout/Reader/CSV/Reader.php | 17 +++++++++++++++++ src/Spout/Reader/CSV/RowIterator.php | 8 ++++++-- src/Spout/Reader/CSV/Sheet.php | 4 ++-- src/Spout/Reader/CSV/SheetIterator.php | 4 ++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/Spout/Reader/CSV/Reader.php b/src/Spout/Reader/CSV/Reader.php index 45a13ef..7fc5da8 100644 --- a/src/Spout/Reader/CSV/Reader.php +++ b/src/Spout/Reader/CSV/Reader.php @@ -29,6 +29,9 @@ class Reader extends AbstractReader /** @var string Encoding of the CSV file to be read */ protected $encoding = EncodingHelper::ENCODING_UTF8; + /** @var string Defines the End of line */ + protected $endOfLineCharacter = "\n"; + /** * Sets the field delimiter for the CSV. * Needs to be called before opening the reader. @@ -68,6 +71,19 @@ class Reader extends AbstractReader return $this; } + /** + * Sets the EOL for the CSV. + * Needs to be called before opening the reader. + * + * @param string $fieldEnclosure Character that enclose fields + * @return Reader + */ + public function setEndOfLineCharacter($endOfLineCharacter) + { + $this->endOfLineCharacter = $endOfLineCharacter; + return $this; + } + /** * Opens the file at the given path to make it ready to be read. * If setEncoding() was not called, it assumes that the file is encoded in UTF-8. @@ -88,6 +104,7 @@ class Reader extends AbstractReader $this->fieldDelimiter, $this->fieldEnclosure, $this->encoding, + $this->endOfLineCharacter, $this->globalFunctionsHelper ); } diff --git a/src/Spout/Reader/CSV/RowIterator.php b/src/Spout/Reader/CSV/RowIterator.php index f8e33e1..0752d27 100644 --- a/src/Spout/Reader/CSV/RowIterator.php +++ b/src/Spout/Reader/CSV/RowIterator.php @@ -49,6 +49,9 @@ class RowIterator implements IteratorInterface /** @var string End of line delimiter, encoded using the same encoding as the CSV */ protected $encodedEOLDelimiter; + /** @var string End of line delimiter, given by the user as input. */ + protected $inputEOLDelimiter; + /** * @param resource $filePointer Pointer to the CSV file to read * @param string $fieldDelimiter Character that delimits fields @@ -56,12 +59,13 @@ class RowIterator implements IteratorInterface * @param string $encoding Encoding of the CSV file to be read * @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper */ - public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $globalFunctionsHelper) + public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $EOLDelimiter, $globalFunctionsHelper) { $this->filePointer = $filePointer; $this->fieldDelimiter = $fieldDelimiter; $this->fieldEnclosure = $fieldEnclosure; $this->encoding = $encoding; + $this->inputEOLDelimiter = $EOLDelimiter; $this->globalFunctionsHelper = $globalFunctionsHelper; $this->encodingHelper = new EncodingHelper($globalFunctionsHelper); @@ -172,7 +176,7 @@ class RowIterator implements IteratorInterface protected function getEncodedEOLDelimiter() { if (!isset($this->encodedEOLDelimiter)) { - $this->encodedEOLDelimiter = $this->encodingHelper->attemptConversionFromUTF8("\n", $this->encoding); + $this->encodedEOLDelimiter = $this->encodingHelper->attemptConversionFromUTF8($this->inputEOLDelimiter, $this->encoding); } return $this->encodedEOLDelimiter; diff --git a/src/Spout/Reader/CSV/Sheet.php b/src/Spout/Reader/CSV/Sheet.php index f949a62..b9c66c7 100644 --- a/src/Spout/Reader/CSV/Sheet.php +++ b/src/Spout/Reader/CSV/Sheet.php @@ -21,9 +21,9 @@ class Sheet implements SheetInterface * @param string $encoding Encoding of the CSV file to be read * @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper */ - public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $globalFunctionsHelper) + public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $endOfLineCharacter, $globalFunctionsHelper) { - $this->rowIterator = new RowIterator($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $globalFunctionsHelper); + $this->rowIterator = new RowIterator($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $endOfLineCharacter, $globalFunctionsHelper); } /** diff --git a/src/Spout/Reader/CSV/SheetIterator.php b/src/Spout/Reader/CSV/SheetIterator.php index 4ce0d54..8ee2e99 100644 --- a/src/Spout/Reader/CSV/SheetIterator.php +++ b/src/Spout/Reader/CSV/SheetIterator.php @@ -25,9 +25,9 @@ class SheetIterator implements IteratorInterface * @param string $encoding Encoding of the CSV file to be read * @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper */ - public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $globalFunctionsHelper) + public function __construct($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $endOfLineCharacter, $globalFunctionsHelper) { - $this->sheet = new Sheet($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $globalFunctionsHelper); + $this->sheet = new Sheet($filePointer, $fieldDelimiter, $fieldEnclosure, $encoding, $endOfLineCharacter, $globalFunctionsHelper); } /**