-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathDelimitedFileEngine.cs
More file actions
104 lines (90 loc) · 3.2 KB
/
DelimitedFileEngine.cs
File metadata and controls
104 lines (90 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
namespace FlatFile.Delimited.Implementation
{
using System;
using System.IO;
using System.Text;
using FlatFile.Core;
using FlatFile.Core.Base;
/// <summary>
/// Class DelimitedFileEngine.
/// </summary>
public class DelimitedFileEngine :
FlatFileEngine<IDelimitedFieldSettingsContainer, IDelimitedLayoutDescriptor>
{
/// <summary>
/// The line builder factory
/// </summary>
private readonly IDelimitedLineBuilderFactory _builderFactory;
/// <summary>
/// The line parser factory
/// </summary>
private readonly IDelimitedLineParserFactory _parserFactory;
/// <summary>
/// The layout descriptor
/// </summary>
private readonly IDelimitedLayoutDescriptor _layoutDescriptor;
/// <summary>
/// Initializes a new instance of the <see cref="DelimitedFileEngine"/> class.
/// </summary>
/// <param name="layoutDescriptor">The layout descriptor.</param>
/// <param name="builderFactory">The builder factory.</param>
/// <param name="parserFactory">The parser factory.</param>
/// <param name="handleEntryReadError">The handle entry read error.</param>
internal DelimitedFileEngine(
IDelimitedLayoutDescriptor layoutDescriptor,
IDelimitedLineBuilderFactory builderFactory,
IDelimitedLineParserFactory parserFactory,
Func<string, Exception, bool> handleEntryReadError = null)
: base(handleEntryReadError)
{
_builderFactory = builderFactory;
_parserFactory = parserFactory;
_layoutDescriptor = layoutDescriptor;
}
/// <summary>
/// Gets the line builder.
/// </summary>
/// <value>The line builder.</value>
protected override ILineBuilder LineBuilder
{
get { return _builderFactory.GetBuilder(LayoutDescriptor); }
}
/// <summary>
/// Gets the line parser.
/// </summary>
/// <value>The line parser.</value>
protected override ILineParser LineParser
{
get { return _parserFactory.GetParser(LayoutDescriptor); }
}
/// <summary>
/// Gets the layout descriptor.
/// </summary>
/// <value>The layout descriptor.</value>
protected override IDelimitedLayoutDescriptor LayoutDescriptor
{
get { return _layoutDescriptor; }
}
/// <summary>
/// Writes the header.
/// </summary>
/// <param name="writer">The writer.</param>
protected override void WriteHeader(TextWriter writer)
{
if (!LayoutDescriptor.HasHeader)
{
return;
}
var fields = LayoutDescriptor.Fields;
var stringBuilder = new StringBuilder();
foreach (var field in fields)
{
stringBuilder
.Append(field.Name)
.Append(LayoutDescriptor.Delimiter);
}
stringBuilder.Remove(stringBuilder.Length - 1, 1);
writer.WriteLine(stringBuilder.ToString());
}
}
}