77
88namespace Ninja . FileUtil
99{
10- public class Engine < T > where T : FileLine , new ( )
10+ public class Engine
1111 {
1212 private readonly IFileProvider fileProvider ;
1313 private readonly ILineParser lineParser ;
1414
15- internal Engine ( IFileProvider fileProvider , ILineParser lineParser )
15+ internal Engine ( ILineParser lineParser , IFileProvider fileProvider )
1616 {
1717 this . fileProvider = fileProvider ;
1818 this . lineParser = lineParser ;
1919 }
20+
2021 /// <summary>
21- /// Create Single line type Engine instance with default parser.
22+ /// Create Engine instance with default parser and file provider .
2223 /// </summary>
23- /// <param name="parserSettings">Parser setting instance.</param>
24- /// <param name="fileProvider">File provider instance.</param>
25- public Engine ( IParserSettings parserSettings , IFileProvider fileProvider )
26- : this ( fileProvider , new LineParser ( parserSettings . Delimiter ) )
24+ /// <remarks>
25+ /// You need to provide the parser and file provider settings.
26+ /// </remarks>
27+ /// <param name="settings">Configuration settings for default file provider and parser</param>
28+ public Engine ( IConfigSettings settings )
29+ : this ( new LineParser ( settings . ParserSettings ) , new DefaulProvider ( settings . ProviderSettings , new FileHelper ( ) ) )
2730 {
2831
2932 }
33+
3034 /// <summary>
31- /// Create Multi line type Engine instance with default parser and default file provider .
35+ /// Create Engine instance with custom file provider and default parser .
3236 /// </summary>
33- /// <param name="settings">Configuration settings for default file provider and default parser</param>
34- public Engine ( IConfigSettings settings )
35- : this ( settings . ParserSettings , new DefaulProvider ( settings . ProviderSettings , new FileHelper ( ) ) )
37+ /// <param name="parserSettings">Parser settings.</param>
38+ /// <param name="fileProvider">Custom file provider instance.</param>
39+ public Engine ( IParserSettings parserSettings , IFileProvider fileProvider )
40+ : this ( new LineParser ( parserSettings ) , fileProvider )
3641 {
37-
42+
3843 }
39-
4044 /// <summary>
4145 /// Get all single fixed format lines from a text file parsed into a strongly typed array
42- /// Default delimiter is '|'
46+ /// Default delimiter is '|'. Override by specifying the delimiter in parser settings.
4347 /// Example File -
4448 /// "John Walsh|456RT4|True|Male"
4549 /// "Simone Walsh|456RT5|True|Female"
@@ -48,64 +52,30 @@ public Engine(IConfigSettings settings)
4852 /// <returns>
4953 /// Collection of Files each parsed with typed class arrays
5054 /// </returns>
51- public File < T > [ ] GetFiles ( )
55+ public File < T > [ ] GetFiles < T > ( ) where T : FileLine , new ( )
5256 {
5357 var files = fileProvider . GetFiles ( ) ;
5458 return files . Select ( file => new File < T >
55- {
56- FileMeta = new FileMeta
5759 {
58- FileName = file . FileName ,
59- FilePath = file . FilePath ,
60- FileSize = file . FileSize ,
61- Lines = file . Lines ,
62- } ,
63-
64- Data = lineParser . ParseWithNoLineType < T > ( file . Lines )
65- } )
66- . ToArray ( ) ;
67- }
68- }
69-
70- public class Engine < TH , TD , TF > where TH : FileLine , new ( )
71- where TD : FileLine , new ( )
72- where TF : FileLine , new ( )
73- {
74- private readonly IFileProvider fileProvider ;
75- private readonly ILineParser lineParser ;
76- private readonly IParserSettings parserSettings ;
77-
78- internal Engine ( IFileProvider fileProvider , ILineParser lineParser )
79- {
80- this . fileProvider = fileProvider ;
81- this . lineParser = lineParser ;
82- }
83- /// <summary>
84- /// Create Multi line type Engine instance with default parser.
85- /// </summary>
86- /// <param name="parserSettings">Parser setting instance.</param>
87- /// <param name="fileProvider">File provider instance.</param>
88- public Engine ( IParserSettings parserSettings , IFileProvider fileProvider )
89- : this ( fileProvider , new LineParser ( parserSettings . Delimiter ) )
90- {
91- this . parserSettings = parserSettings ;
92- }
93-
94- /// <summary>
95- /// Create Multi line type Engine instance with default parser and default file provider.
96- /// </summary>
97- /// <param name="settings">Configuration settings for default file provider and default parser</param>
98- public Engine ( IConfigSettings settings )
99- : this ( settings . ParserSettings , new DefaulProvider ( settings . ProviderSettings , new FileHelper ( ) ) )
100- {
60+ FileMeta = new FileMeta
61+ {
62+ FileName = file . FileName ,
63+ FilePath = file . FilePath ,
64+ FileSize = file . FileSize ,
65+ Lines = file . Lines ,
66+ } ,
10167
68+ Data = lineParser . Parse < T > ( file . Lines )
69+ } )
70+ . ToArray ( ) ;
10271 }
10372
10473 /// <summary>
10574 /// Get all multi-format lines from a text file parsed into header, data and footer
10675 /// typed arrays respectively.
107- /// Header line starts with H, data line starts with D and
108- /// footer line starts with F by defaults
76+ /// Default delimiter is '|'.
77+ /// By default, Header line starts with H, data line starts with D and footer line starts with F.
78+ /// Override these values in parser settings.
10979 /// Example File -
11080 /// "H|22-10-2016|Employee Status"
11181 /// "D|John Walsh|456RT4|True"
@@ -118,8 +88,11 @@ public Engine(IConfigSettings settings)
11888 /// <returns>
11989 /// Collection of Files each parsed with header, footer and data typed arrays
12090 /// </returns>
121- public File < TH , TD , TF > [ ] GetFiles ( )
122- {
91+ public File < TH , TD , TF > [ ] GetFiles < TH , TD , TF > ( )
92+ where TH : FileLine , new ( )
93+ where TD : FileLine , new ( )
94+ where TF : FileLine , new ( )
95+ {
12396 var files = fileProvider . GetFiles ( ) ;
12497
12598 return files . Select ( file =>
@@ -134,9 +107,9 @@ public File<TH, TD, TF>[] GetFiles()
134107 Lines = file . Lines ,
135108 } ,
136109
137- Headers = lineParser . ParseWithLineType < TH > ( file . Lines . Where ( x => x . StartsWith ( parserSettings . LineHeaders . GetHeaderValue ( ) ) ) . ToArray ( ) , LineType . Header ) ,
138- Footers = lineParser . ParseWithLineType < TF > ( file . Lines . Where ( x => x . StartsWith ( parserSettings . LineHeaders . GetFooterValue ( ) ) ) . ToArray ( ) , LineType . Footer ) ,
139- Data = lineParser . ParseWithLineType < TD > ( file . Lines . Where ( x => x . StartsWith ( parserSettings . LineHeaders . GetDataValue ( ) ) ) . ToArray ( ) , LineType . Data )
110+ Header = lineParser . Parse < TH > ( file . Lines , LineType . Header ) . FirstOrDefault ( ) ,
111+ Footer = lineParser . Parse < TF > ( file . Lines , LineType . Footer ) . FirstOrDefault ( ) ,
112+ Data = lineParser . Parse < TD > ( file . Lines , LineType . Data )
140113 } ;
141114
142115 return parsed ;
0 commit comments