@@ -264,22 +264,34 @@ public async Task<bool> ReadAsync()
264264 }
265265
266266 private void DetectDelimiter ( )
267- {
267+ {
268268 var text = new string ( buffer , 0 , charsRead ) ;
269- var delimiterCounts = new Dictionary < string , int > ( ) ;
270- foreach ( var delimiter in delimiterValues )
271- {
272- // Escape regex special chars to use as regex pattern.
273- var pattern = Regex . Replace ( delimiter , @"([.$^{\[(|)*+?\\])" , "\\ $1" ) ;
274- delimiterCounts [ delimiter ] = Regex . Matches ( text , pattern ) . Count ;
275- }
276269
277- var maxCount = delimiterCounts . OrderByDescending ( c => c . Value ) . First ( ) ;
278- if ( maxCount . Value > 0 )
270+ while ( text . Length > 0 )
279271 {
280- delimiter = maxCount . Key ;
281- delimiterFirstChar = delimiter [ 0 ] ;
282- configuration . Validate ( ) ;
272+ var index = text . IndexOf ( newLine ) ;
273+
274+ var line = index > - 1 ? text . Substring ( 0 , index + newLine . Length ) : text ;
275+
276+ var delimiterCounts = new Dictionary < string , int > ( ) ;
277+ foreach ( var delimiter in delimiterValues )
278+ {
279+ // Escape regex special chars to use as regex pattern.
280+ var pattern = Regex . Replace ( delimiter , @"([.$^{\[(|)*+?\\])" , "\\ $1" ) ;
281+ delimiterCounts [ delimiter ] = Regex . Matches ( line , pattern ) . Count ;
282+ }
283+
284+ var maxCount = delimiterCounts . OrderByDescending ( c => c . Value ) . First ( ) ;
285+ if ( maxCount . Value > 0 )
286+ {
287+ delimiter = maxCount . Key ;
288+ delimiterFirstChar = delimiter [ 0 ] ;
289+ configuration . Validate ( ) ;
290+
291+ break ;
292+ }
293+
294+ text = index > - 1 ? text . Substring ( index + newLine . Length ) : string . Empty ;
283295 }
284296 }
285297
0 commit comments