Skip to content

Commit b19f7ad

Browse files
committed
Cleanup readers
1 parent 10bc753 commit b19f7ad

File tree

6 files changed

+59
-78
lines changed

6 files changed

+59
-78
lines changed

src/UniqueFileRecordsComparer/UniqueFileRecordsComparer.App/SelectColumnsForm.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@ public SelectColumnsForm(ComparerArguments comparerArguments)
1717
{
1818
InitializeComponent();
1919

20-
using (var sourceReader = FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(comparerArguments.SourceFilePath))))
21-
{
22-
_sourceRowCollection = sourceReader.Read();
23-
}
20+
var sourceReader =
21+
FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(comparerArguments.SourceFilePath)));
22+
var targetReader =
23+
FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(comparerArguments.TargetFilePath)));
2424

25-
using (var targetReader = FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(comparerArguments.TargetFilePath))))
26-
{
27-
_targetRowCollection = targetReader.Read();
28-
}
25+
_sourceRowCollection = sourceReader.Read();
26+
_targetRowCollection = targetReader.Read();
2927

3028
AddColumnsToCheckList(SourceColumnsCheckList, _sourceRowCollection);
3129
AddColumnsToCheckList(TargetColumnsCheckList, _targetRowCollection);
Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
4+
using System.IO.Abstractions;
35
using System.Linq;
46
using CsvHelper;
7+
using CsvHelper.Configuration;
58

69
namespace UniqueFileRecordsComparer.Core.Readers
710
{
811
public class CsvReader : IFileReader
912
{
10-
private readonly ICsvReader _reader;
13+
private readonly FileInfoBase _fileInfo;
1114

12-
public CsvReader(ICsvReader reader)
15+
public CsvReader(FileInfoBase fileInfo)
1316
{
14-
_reader = reader;
17+
_fileInfo = fileInfo;
1518
}
1619

1720
public RowCollection Read()
@@ -22,32 +25,35 @@ public RowCollection Read()
2225

2326
private IEnumerable<Row> ReadCsv()
2427
{
25-
var rows = new List<Row>();
26-
while (_reader.Read())
28+
using (var reader = CreateCsvReader())
2729
{
28-
var row = new Row();
29-
for (var i = 0; i < _reader.CurrentRecord.Length; i++)
30+
var rows = new List<Row>();
31+
while (reader.Read())
3032
{
31-
row.Add(new Column(_reader.FieldHeaders[i], _reader.CurrentRecord[i].Trim()));
33+
rows.Add(GetRow(reader));
3234
}
33-
rows.Add(row);
34-
}
3535

36-
return rows;
36+
return rows;
37+
}
3738
}
3839

39-
public void Dispose()
40+
private static Row GetRow(ICsvReader csvReader)
4041
{
41-
Dispose(true);
42-
GC.SuppressFinalize(this);
42+
var row = new Row();
43+
for (var i = 0; i < csvReader.CurrentRecord.Length; i++)
44+
{
45+
row.Add(new Column(csvReader.FieldHeaders[i], csvReader.CurrentRecord[i].Trim()));
46+
}
47+
return row;
4348
}
4449

45-
protected virtual void Dispose(bool disposing)
50+
private CsvHelper.CsvReader CreateCsvReader()
4651
{
47-
if (disposing)
52+
return new CsvHelper.CsvReader(new StreamReader(_fileInfo.OpenRead()), new CsvConfiguration
4853
{
49-
_reader?.Dispose();
50-
}
54+
HasHeaderRecord = true,
55+
Delimiter = ";"
56+
});
5157
}
5258
}
5359
}
Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Data;
3+
using System.IO;
4+
using System.IO.Abstractions;
45
using System.Linq;
56
using Excel;
67

78
namespace UniqueFileRecordsComparer.Core.Readers
89
{
910
public class ExcelReader : IFileReader
1011
{
11-
private readonly IExcelDataReader _excelDataReader;
12+
private readonly FileInfoBase _fileInfo;
1213

13-
public ExcelReader(IExcelDataReader excelDataReader)
14+
public ExcelReader(FileInfoBase fileInfo)
1415
{
15-
_excelDataReader = excelDataReader;
16+
_fileInfo = fileInfo;
1617
}
1718

1819
public RowCollection Read()
@@ -22,44 +23,36 @@ public RowCollection Read()
2223

2324
private IEnumerable<Row> ExtractDataSet()
2425
{
25-
using (var result = _excelDataReader.AsDataSet())
26+
using (var excelReader = ExcelReaderFactory.CreateOpenXmlReader(_fileInfo.Open(FileMode.Open, FileAccess.Read)))
2627
{
27-
return GetRows(result);
28+
excelReader.IsFirstRowAsColumnNames = true;
29+
using (var result = excelReader.AsDataSet())
30+
{
31+
return GetRows(result);
32+
}
2833
}
2934
}
3035

3136
private static IEnumerable<Row> GetRows(DataSet result)
3237
{
33-
var rows = new List<Row>();
3438
var dataTable = result.Tables[0];
3539

36-
foreach (DataRow dataRow in dataTable.Rows)
37-
{
38-
var row = new Row();
39-
var i = 0;
40-
foreach (var item in dataRow.ItemArray)
41-
{
42-
row.Add(new Column(dataTable.Columns[i].ColumnName, item.ToString().Trim()));
43-
i++;
44-
}
45-
rows.Add(row);
46-
}
47-
48-
return rows;
49-
}
50-
51-
public void Dispose()
52-
{
53-
Dispose(true);
54-
GC.SuppressFinalize(this);
40+
return dataTable
41+
.Rows
42+
.Cast<DataRow>()
43+
.Select(GetRow);
5544
}
5645

57-
protected virtual void Dispose(bool disposing)
46+
private static Row GetRow(DataRow dataRow)
5847
{
59-
if (disposing)
48+
var row = new Row();
49+
var i = 0;
50+
foreach (var item in dataRow.ItemArray)
6051
{
61-
_excelDataReader?.Dispose();
52+
row.Add(new Column(dataRow.Table.Columns[i].ColumnName, item.ToString().Trim()));
53+
i++;
6254
}
55+
return row;
6356
}
6457
}
6558
}

src/UniqueFileRecordsComparer/UniqueFileRecordsComparer.Core/Readers/FileReaderFactory.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
using System;
2-
using System.IO;
32
using System.IO.Abstractions;
4-
using CsvHelper.Configuration;
5-
using Excel;
63

74
namespace UniqueFileRecordsComparer.Core.Readers
85
{
@@ -12,20 +9,12 @@ public static IFileReader CreateFromFileName(FileInfoBase fileInfoBase)
129
{
1310
if (IsCsvFile(fileInfoBase.FullName))
1411
{
15-
var reader = new CsvHelper.CsvReader(new StreamReader(fileInfoBase.OpenRead()), new CsvConfiguration
16-
{
17-
HasHeaderRecord = true,
18-
Delimiter = ";"
19-
});
20-
21-
return new CsvReader(reader);
12+
return new CsvReader(fileInfoBase);
2213
}
2314

2415
if (IsExcelFile(fileInfoBase.FullName))
2516
{
26-
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileInfoBase.Open(FileMode.Open, FileAccess.Read));
27-
excelReader.IsFirstRowAsColumnNames = true;
28-
return new ExcelReader(excelReader);
17+
return new ExcelReader(fileInfoBase);
2918
}
3019

3120
throw new InvalidOperationException();

src/UniqueFileRecordsComparer/UniqueFileRecordsComparer.Core/Readers/IFileReader.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
using System;
2-
31
namespace UniqueFileRecordsComparer.Core.Readers
42
{
5-
public interface IFileReader : IDisposable
3+
public interface IFileReader
64
{
75
RowCollection Read();
86
}

src/UniqueFileRecordsComparer/tests/UniqueFileRecordsComparer.Core.IntegrationTests/CompareTwoFieldWithOneFieldTests.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,9 @@ public void Test()
6363

6464
private static RowCollection ReadRowCollection(string path)
6565
{
66-
RowCollection csvRowCollection;
67-
using (var reader = FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(path))))
68-
{
69-
csvRowCollection = reader.Read();
70-
}
71-
return csvRowCollection;
66+
var reader = FileReaderFactory.CreateFromFileName(new FileInfoWrapper(new FileInfo(path)));
67+
68+
return reader.Read();
7269
}
7370

7471
private static void CheckFilesExist()

0 commit comments

Comments
 (0)