@@ -183,73 +183,74 @@ private static DataFrame ReadCsvLinesIntoDataFrame(WrappedStreamReaderOrStringRe
183183 throw new ArgumentException ( string . Format ( Strings . ExpectedEitherGuessRowsOrDataTypes , nameof ( guessRows ) , nameof ( dataTypes ) ) ) ;
184184 }
185185
186- TextReader textReader = wrappedReader . GetTextReader ( ) ;
187- TextFieldParser parser = new TextFieldParser ( textReader ) ;
188- parser . SetDelimiters ( separator . ToString ( ) ) ;
189-
190- var linesForGuessType = new List < string [ ] > ( ) ;
191- long rowline = 0 ;
192- int numberOfColumns = dataTypes ? . Length ?? 0 ;
193-
194- if ( header == true && numberOfRowsToRead != - 1 )
195- {
196- numberOfRowsToRead ++ ;
197- }
198-
199186 List < DataFrameColumn > columns ;
200- // First pass: schema and number of rows.
201-
202187 string [ ] fields ;
203- while ( ( fields = parser . ReadFields ( ) ) != null )
188+ using ( var textReader = wrappedReader . GetTextReader ( ) )
204189 {
205- if ( ( numberOfRowsToRead == - 1 ) || rowline < numberOfRowsToRead )
190+ TextFieldParser parser = new TextFieldParser ( textReader ) ;
191+ parser . SetDelimiters ( separator . ToString ( ) ) ;
192+
193+ var linesForGuessType = new List < string [ ] > ( ) ;
194+ long rowline = 0 ;
195+ int numberOfColumns = dataTypes ? . Length ?? 0 ;
196+
197+ if ( header == true && numberOfRowsToRead != - 1 )
206198 {
207- if ( linesForGuessType . Count < guessRows || ( header && rowline == 0 ) )
199+ numberOfRowsToRead ++ ;
200+ }
201+
202+ // First pass: schema and number of rows.
203+ while ( ( fields = parser . ReadFields ( ) ) != null )
204+ {
205+ if ( ( numberOfRowsToRead == - 1 ) || rowline < numberOfRowsToRead )
208206 {
209- string [ ] spl = fields ;
210- if ( header && rowline == 0 )
207+ if ( linesForGuessType . Count < guessRows || ( header && rowline == 0 ) )
211208 {
212- if ( columnNames == null )
209+ string [ ] spl = fields ;
210+ if ( header && rowline == 0 )
213211 {
214- columnNames = spl ;
212+ if ( columnNames == null )
213+ {
214+ columnNames = spl ;
215+ }
216+ }
217+ else
218+ {
219+ linesForGuessType . Add ( spl ) ;
220+ numberOfColumns = Math . Max ( numberOfColumns , spl . Length ) ;
215221 }
216- }
217- else
218- {
219- linesForGuessType . Add ( spl ) ;
220- numberOfColumns = Math . Max ( numberOfColumns , spl . Length ) ;
221222 }
222223 }
224+ ++ rowline ;
225+ if ( rowline == guessRows || guessRows == 0 )
226+ {
227+ break ;
228+ }
223229 }
224- ++ rowline ;
225- if ( rowline == guessRows || guessRows == 0 )
230+
231+ if ( rowline == 0 )
226232 {
227- break ;
233+ throw new FormatException ( Strings . EmptyFile ) ;
228234 }
229- }
230235
231- if ( rowline == 0 )
232- {
233- throw new FormatException ( Strings . EmptyFile ) ;
234- }
235-
236- columns = new List < DataFrameColumn > ( numberOfColumns ) ;
237- // Guesses types or looks up dataTypes and adds columns.
238- for ( int i = 0 ; i < numberOfColumns ; ++ i )
239- {
240- Type kind = dataTypes == null ? GuessKind ( i , linesForGuessType ) : dataTypes [ i ] ;
241- columns . Add ( CreateColumn ( kind , columnNames , i ) ) ;
236+ columns = new List < DataFrameColumn > ( numberOfColumns ) ;
237+ // Guesses types or looks up dataTypes and adds columns.
238+ for ( int i = 0 ; i < numberOfColumns ; ++ i )
239+ {
240+ Type kind = dataTypes == null ? GuessKind ( i , linesForGuessType ) : dataTypes [ i ] ;
241+ columns . Add ( CreateColumn ( kind , columnNames , i ) ) ;
242+ }
242243 }
243244
244245 DataFrame ret = new DataFrame ( columns ) ;
245246
246247 // Fill values.
247- using ( textReader = wrappedReader . GetTextReader ( ) )
248+ using ( var textReader = wrappedReader . GetTextReader ( ) )
248249 {
249- parser = new TextFieldParser ( textReader ) ;
250+ TextFieldParser parser = new TextFieldParser ( textReader ) ;
250251 parser . SetDelimiters ( separator . ToString ( ) ) ;
251252
252- rowline = 0 ;
253+ long rowline = 0 ;
253254 while ( ( fields = parser . ReadFields ( ) ) != null && ( numberOfRowsToRead == - 1 || rowline < numberOfRowsToRead ) )
254255 {
255256 string [ ] spl = fields ;
@@ -305,16 +306,14 @@ public WrappedStreamReaderOrStringReader(string csvString)
305306 // Returns a new TextReader. If the wrapped object is a stream, the stream is reset to its initial position.
306307 public TextReader GetTextReader ( )
307308 {
309+ if ( _stream != null )
308310 {
309- if ( _stream != null )
310- {
311- _stream . Seek ( _initialPosition , SeekOrigin . Begin ) ;
312- return new StreamReader ( _stream , _encoding , detectEncodingFromByteOrderMarks : true , DefaultStreamReaderBufferSize , leaveOpen : true ) ;
313- }
314- else
315- {
316- return new StringReader ( _csvString ) ;
317- }
311+ _stream . Seek ( _initialPosition , SeekOrigin . Begin ) ;
312+ return new StreamReader ( _stream , _encoding , detectEncodingFromByteOrderMarks : true , DefaultStreamReaderBufferSize , leaveOpen : true ) ;
313+ }
314+ else
315+ {
316+ return new StringReader ( _csvString ) ;
318317 }
319318
320319 }
0 commit comments