@@ -48,35 +48,51 @@ public void LoadFile(string path)
4848 var encoding = CharsetDetector . DetectFromFile ( path ) . Detected ? . Encoding ??
4949 Encoding . Default ;
5050
51- using ( var sr = new StreamReader ( new FileStream ( path , FileMode . Open , FileAccess . Read , FileShare . ReadWrite ) , encoding ) )
51+ using var sr = new StreamReader ( new FileStream ( path , FileMode . Open , FileAccess . Read , FileShare . ReadWrite ) , encoding ) ;
52+
53+ // Use fixed delimiters for known extensions to avoid mis-detection on small samples.
54+ var extension = Path . GetExtension ( path ) ;
55+ var delimiter = extension . Equals ( ".tsv" , StringComparison . OrdinalIgnoreCase )
56+ ? "\t "
57+ : extension . Equals ( ".psv" , StringComparison . OrdinalIgnoreCase )
58+ ? "|"
59+ : null ;
60+
61+ var conf = new CsvConfiguration ( CultureInfo . CurrentUICulture )
5262 {
53- var conf = new CsvConfiguration ( CultureInfo . CurrentUICulture ) { MissingFieldFound = null , BadDataFound = null , DetectDelimiter = true } ;
63+ MissingFieldFound = null ,
64+ BadDataFound = null ,
65+ DetectDelimiter = delimiter == null ,
66+ } ;
5467
55- using ( var parser = new CsvParser ( sr , conf ) )
56- {
57- var i = 0 ;
58- while ( parser . Read ( ) )
59- {
60- var row = parser . Record ;
61- if ( row == null )
62- break ;
63- row = Concat ( [ $ "{ i ++ + 1 } ". PadLeft ( 6 ) ] , row ) ;
68+ if ( delimiter != null )
69+ {
70+ // Force delimiter for TSV/PSV so CsvHelper doesn't auto-detect incorrectly.
71+ conf . Delimiter = delimiter ;
72+ }
6473
65- if ( ! binded )
66- {
67- SetupColumnBinding ( row . Length ) ;
68- binded = true ;
69- }
74+ using var parser = new CsvParser ( sr , conf ) ;
75+ var i = 0 ;
76+ while ( parser . Read ( ) )
77+ {
78+ var row = parser . Record ;
79+ if ( row == null )
80+ break ;
81+ row = Concat ( [ $ "{ i ++ + 1 } ". PadLeft ( 6 ) ] , row ) ;
7082
71- if ( i > limit )
72- {
73- Rows . Add ( Enumerable . Repeat ( "..." , row . Length ) . ToArray ( ) ) ;
74- break ;
75- }
83+ if ( ! binded )
84+ {
85+ SetupColumnBinding ( row . Length ) ;
86+ binded = true ;
87+ }
7688
77- Rows . Add ( row ) ;
78- }
89+ if ( i > limit )
90+ {
91+ Rows . Add ( [ .. Enumerable . Repeat ( "..." , row . Length ) ] ) ;
92+ break ;
7993 }
94+
95+ Rows . Add ( row ) ;
8096 }
8197 }
8298
0 commit comments