7
7
8
8
namespace Ninja . FileUtil
9
9
{
10
- public class Engine < T > where T : FileLine , new ( )
10
+ public class Engine
11
11
{
12
12
private readonly IFileProvider fileProvider ;
13
13
private readonly ILineParser lineParser ;
14
14
15
- internal Engine ( IFileProvider fileProvider , ILineParser lineParser )
15
+ internal Engine ( ILineParser lineParser , IFileProvider fileProvider )
16
16
{
17
17
this . fileProvider = fileProvider ;
18
18
this . lineParser = lineParser ;
19
19
}
20
+
20
21
/// <summary>
21
- /// Create Single line type Engine instance with default parser.
22
+ /// Create Engine instance with default parser and file provider .
22
23
/// </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 ( ) ) )
27
30
{
28
31
29
32
}
33
+
30
34
/// <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 .
32
36
/// </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 )
36
41
{
37
-
42
+
38
43
}
39
-
40
44
/// <summary>
41
45
/// 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.
43
47
/// Example File -
44
48
/// "John Walsh|456RT4|True|Male"
45
49
/// "Simone Walsh|456RT5|True|Female"
@@ -48,64 +52,30 @@ public Engine(IConfigSettings settings)
48
52
/// <returns>
49
53
/// Collection of Files each parsed with typed class arrays
50
54
/// </returns>
51
- public File < T > [ ] GetFiles ( )
55
+ public File < T > [ ] GetFiles < T > ( ) where T : FileLine , new ( )
52
56
{
53
57
var files = fileProvider . GetFiles ( ) ;
54
58
return files . Select ( file => new File < T >
55
- {
56
- FileMeta = new FileMeta
57
59
{
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
+ } ,
101
67
68
+ Data = lineParser . Parse < T > ( file . Lines )
69
+ } )
70
+ . ToArray ( ) ;
102
71
}
103
72
104
73
/// <summary>
105
74
/// Get all multi-format lines from a text file parsed into header, data and footer
106
75
/// 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.
109
79
/// Example File -
110
80
/// "H|22-10-2016|Employee Status"
111
81
/// "D|John Walsh|456RT4|True"
@@ -118,8 +88,11 @@ public Engine(IConfigSettings settings)
118
88
/// <returns>
119
89
/// Collection of Files each parsed with header, footer and data typed arrays
120
90
/// </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
+ {
123
96
var files = fileProvider . GetFiles ( ) ;
124
97
125
98
return files . Select ( file =>
@@ -134,9 +107,9 @@ public File<TH, TD, TF>[] GetFiles()
134
107
Lines = file . Lines ,
135
108
} ,
136
109
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 )
140
113
} ;
141
114
142
115
return parsed ;
0 commit comments