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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// Copyright 2009-2022 Josh Close
// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
// https://github.com/JoshClose/CsvHelper
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
namespace CsvHelper
{
/// <summary>
/// Defines methods used to read parsed data
/// from a CSV file.
/// </summary>
public interface IReader : IReaderRow, IDisposable
{
/// <summary>
/// Reads the header record without reading the first row.
/// </summary>
/// <returns>True if there are more records, otherwise false.</returns>
bool ReadHeader();
/// <summary>
/// Advances the reader to the next record. This will not read headers.
/// You need to call <see cref="Read"/> then <see cref="ReadHeader"/>
/// for the headers to be read.
/// </summary>
/// <returns>True if there are more records, otherwise false.</returns>
bool Read();
/// <summary>
/// Advances the reader to the next record. This will not read headers.
/// You need to call <see cref="ReadAsync"/> then <see cref="ReadHeader"/>
/// for the headers to be read.
/// </summary>
/// <returns>True if there are more records, otherwise false.</returns>
Task<bool> ReadAsync();
/// <summary>
/// Gets all the records in the CSV file and
/// converts each to <see cref="Type"/> T. The Read method
/// should not be used when using this.
/// </summary>
/// <typeparam name="T">The <see cref="Type"/> of the record.</typeparam>
/// <returns>An <see cref="IEnumerable{T}" /> of records.</returns>
IEnumerable<T> GetRecords<T>();
/// <summary>
/// Gets all the records in the CSV file and converts
/// each to <see cref="System.Type"/> T. The read method
/// should not be used when using this.
/// </summary>
/// <typeparam name="T">The <see cref="System.Type"/> of the record.</typeparam>
/// <param name="anonymousTypeDefinition">The anonymous type definition to use for the records.</param>
/// <returns>An <see cref="IEnumerable{T}"/> of records.</returns>
IEnumerable<T> GetRecords<T>(T anonymousTypeDefinition);
/// <summary>
/// Gets all the records in the CSV file and
/// converts each to <see cref="Type"/> T. The Read method
/// should not be used when using this.
/// </summary>
/// <param name="type">The <see cref="Type"/> of the record.</param>
/// <returns>An <see cref="IEnumerable{Object}" /> of records.</returns>
IEnumerable<object> GetRecords(Type type);
/// <summary>
/// Enumerates the records hydrating the given record instance with row data.
/// The record instance is re-used and not cleared on each enumeration.
/// This only works for streaming rows. If any methods are called on the projection
/// that force the evaluation of the IEnumerable, such as ToList(), the entire list
/// will contain the same instance of the record, which is the last row.
/// </summary>
/// <typeparam name="T">The type of the record.</typeparam>
/// <param name="record">The record to fill each enumeration.</param>
/// <returns>An <see cref="IEnumerable{T}"/> of records.</returns>
IEnumerable<T> EnumerateRecords<T>(T record);
#if !NET45
/// <summary>
/// Gets all the records in the CSV file and
/// converts each to <see cref="Type"/> T. The Read method
/// should not be used when using this.
/// </summary>
/// <typeparam name="T">The <see cref="Type"/> of the record.</typeparam>
/// <param name="cancellationToken">The cancellation token to stop the writing.</param>
/// <returns>An <see cref="IAsyncEnumerable{T}" /> of records.</returns>
IAsyncEnumerable<T> GetRecordsAsync<T>(CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Gets all the records in the CSV file and converts
/// each to <see cref="System.Type"/> T. The read method
/// should not be used when using this.
/// </summary>
/// <typeparam name="T">The <see cref="System.Type"/> of the record.</typeparam>
/// <param name="anonymousTypeDefinition">The anonymous type definition to use for the records.</param>
/// <param name="cancellationToken">The cancellation token to stop the writing.</param>
/// <returns>An <see cref="IAsyncEnumerable{T}"/> of records.</returns>
IAsyncEnumerable<T> GetRecordsAsync<T>(T anonymousTypeDefinition, CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Gets all the records in the CSV file and
/// converts each to <see cref="Type"/> T. The Read method
/// should not be used when using this.
/// </summary>
/// <param name="type">The <see cref="Type"/> of the record.</param>
/// <param name="cancellationToken">The cancellation token to stop the writing.</param>
/// <returns>An <see cref="IAsyncEnumerable{Object}" /> of records.</returns>
IAsyncEnumerable<object> GetRecordsAsync(Type type, CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Enumerates the records hydrating the given record instance with row data.
/// The record instance is re-used and not cleared on each enumeration.
/// This only works for streaming rows. If any methods are called on the projection
/// that force the evaluation of the IEnumerable, such as ToList(), the entire list
/// will contain the same instance of the record, which is the last row.
/// </summary>
/// <typeparam name="T">The type of the record.</typeparam>
/// <param name="record">The record to fill each enumeration.</param>
/// /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
/// <returns>An <see cref="IAsyncEnumerable{T}"/> of records.</returns>
IAsyncEnumerable<T> EnumerateRecordsAsync<T>(T record, CancellationToken cancellationToken = default(CancellationToken));
#endif
}
}
|