66use Evenement \EventEmitterTrait ;
77use React \Stream \ReadableStreamInterface ;
88use React \Stream \Util ;
9- use React \Stream \WritableStreamInterface ;
109
1110class Reader implements EventEmitterInterface
1211{
1312 use EventEmitterTrait;
1413
14+ const EVENT_HEADER = 'header ' ;
15+ const EVENT_DATA = 'data ' ;
16+
1517 /** @var ReadableStreamInterface $stream */
1618 protected $ stream ;
1719
1820 /** @var resource $buffer */
1921 protected $ buffer ;
2022 protected $ paused = false ;
23+
24+ /** @var null|array $header */
25+ protected $ header ;
26+ protected $ parseHeader = true ;
27+ protected $ headerParsed = false ;
28+
2129 protected $ delimiter = ", " ;
2230 protected $ enclosure = "\"" ;
2331 protected $ escape = "\\" ;
2432
33+ protected $ rowsParsed = 0 ;
34+
2535 /**
2636 * Reader constructor.
27- * @param WritableStreamInterface $stream
37+ * @param ReadableStreamInterface $stream
2838 */
2939 public function __construct (ReadableStreamInterface $ stream )
3040 {
@@ -56,7 +66,17 @@ public function parseBuffer()
5666 $ this ->stream ->isReadable () === false
5767 ) {
5868 $ start = ftell ($ this ->buffer );
59- $ this ->emit ("data " , [$ field ]);
69+ ++$ this ->rowsParsed ;
70+ if (
71+ $ this ->headerParsed === false &&
72+ $ this ->parseHeader === true
73+ ) {
74+ $ this ->header = $ field ;
75+ $ this ->headerParsed = true ;
76+ $ this ->emit ("header " , [$ field ]);
77+ } else {
78+ $ this ->emit ("data " , [$ field ]);
79+ }
6080 }
6181 }
6282
@@ -66,6 +86,11 @@ public function parseBuffer()
6686 fputs ($ this ->buffer , $ dataRemainig );
6787 }
6888
89+ public function setParseHeader ($ parseHeader )
90+ {
91+ $ this ->parseHeader = (bool )$ parseHeader ;
92+ }
93+
6994 public function isPaused ()
7095 {
7196 return $ this ->paused ;
@@ -96,6 +121,16 @@ public function close()
96121 $ this ->stream ->close ();
97122 }
98123
124+ public function getHeader ()
125+ {
126+ return $ this ->header ;
127+ }
128+
129+ public function getRowsParsed ()
130+ {
131+ return $ this ->rowsParsed ;
132+ }
133+
99134 public function setDelimiter ($ delimiter )
100135 {
101136 $ this ->delimiter = mb_substr ($ delimiter , 0 , 1 );
0 commit comments