Added EOL configuration support while reading CSV files...

Enhancement for #172 issue…
This commit is contained in:
Sebastian Fichera 2016-02-11 17:12:54 -06:00
parent e4cc8b4eaa
commit 03e85ffc21
4 changed files with 27 additions and 6 deletions

View File

@ -29,6 +29,9 @@ class Reader extends AbstractReader
/** @var string Encoding of the CSV file to be read */ /** @var string Encoding of the CSV file to be read */
protected $encoding = EncodingHelper::ENCODING_UTF8; protected $encoding = EncodingHelper::ENCODING_UTF8;
/** @var string Defines the End of line */
protected $endOfLineCharacter = "\n";
/** /**
* Sets the field delimiter for the CSV. * Sets the field delimiter for the CSV.
* Needs to be called before opening the reader. * Needs to be called before opening the reader.
@ -68,6 +71,19 @@ class Reader extends AbstractReader
return $this; 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. * 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. * 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->fieldDelimiter,
$this->fieldEnclosure, $this->fieldEnclosure,
$this->encoding, $this->encoding,
$this->endOfLineCharacter,
$this->globalFunctionsHelper $this->globalFunctionsHelper
); );
} }

View File

@ -49,6 +49,9 @@ class RowIterator implements IteratorInterface
/** @var string End of line delimiter, encoded using the same encoding as the CSV */ /** @var string End of line delimiter, encoded using the same encoding as the CSV */
protected $encodedEOLDelimiter; 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 resource $filePointer Pointer to the CSV file to read
* @param string $fieldDelimiter Character that delimits fields * @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 string $encoding Encoding of the CSV file to be read
* @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper * @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->filePointer = $filePointer;
$this->fieldDelimiter = $fieldDelimiter; $this->fieldDelimiter = $fieldDelimiter;
$this->fieldEnclosure = $fieldEnclosure; $this->fieldEnclosure = $fieldEnclosure;
$this->encoding = $encoding; $this->encoding = $encoding;
$this->inputEOLDelimiter = $EOLDelimiter;
$this->globalFunctionsHelper = $globalFunctionsHelper; $this->globalFunctionsHelper = $globalFunctionsHelper;
$this->encodingHelper = new EncodingHelper($globalFunctionsHelper); $this->encodingHelper = new EncodingHelper($globalFunctionsHelper);
@ -172,7 +176,7 @@ class RowIterator implements IteratorInterface
protected function getEncodedEOLDelimiter() protected function getEncodedEOLDelimiter()
{ {
if (!isset($this->encodedEOLDelimiter)) { if (!isset($this->encodedEOLDelimiter)) {
$this->encodedEOLDelimiter = $this->encodingHelper->attemptConversionFromUTF8("\n", $this->encoding); $this->encodedEOLDelimiter = $this->encodingHelper->attemptConversionFromUTF8($this->inputEOLDelimiter, $this->encoding);
} }
return $this->encodedEOLDelimiter; return $this->encodedEOLDelimiter;

View File

@ -21,9 +21,9 @@ class Sheet implements SheetInterface
* @param string $encoding Encoding of the CSV file to be read * @param string $encoding Encoding of the CSV file to be read
* @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper * @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);
} }
/** /**

View File

@ -25,9 +25,9 @@ class SheetIterator implements IteratorInterface
* @param string $encoding Encoding of the CSV file to be read * @param string $encoding Encoding of the CSV file to be read
* @param \Box\Spout\Common\Helper\GlobalFunctionsHelper $globalFunctionsHelper * @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);
} }
/** /**