PocketCsvReader is a highly efficient and lightweight library tailored for parsing delimited flat files like CSV and TSV. With a focus on simplicity and performance, it offers seamless file reading and supports versatile outputs, including DataTables, string arrays, strongly-typed object mapping and an IDataReader interface. Designed for projects requiring rapid data ingestion with minimal configuration, PocketCsvReader is a dependable solution for handling structured flat-file data effortlessly.
About | Install | Quick-start
Continuous integration builds:
Replace <VersionNumber>
with the desired version in each of the following solutions. If no version is specified, the latest version will be installed.
-
Open a command prompt or terminal.
-
Run the following command:
nuget install PocketCsvReader -Version <VersionNumber>
-
Open the Package Manager Console from Tools > NuGet Package Manager > Package Manager Console.
-
Run the following command:
Install-Package PocketCsvReader -Version <VersionNumber>
-
Open a terminal or command prompt.
-
Navigate to the directory of your project.
-
Run the following command:
dotnet add package PocketCsvReader --version <VersionNumber>
The CsvReader
class is a flexible and efficient tool for reading and parsing CSV files or streams into various formats, such as DataTable
, IDataReader
, or strongly-typed objects. This documentation explains the basics of how to use the class, including common use cases and examples.
- Read CSV files or streams into a
DataTable
. - Access CSV data in a forward-only, read-only manner using
IDataReader
. - Map CSV records to strongly-typed objects.
- Map CSV records to array of strings.
- Customizable CSV parsing profiles for delimiters, quote handling, and more.
- Supports encoding detection through the
IEncodingDetector
interface.
You can create an instance of CsvReader
with various configurations:
// Default configuration: comma-delimited, double quotes for escaping, 4 KB buffer size.
var csvReader = new CsvReader();
// Custom CSV profile (e.g., semicolon-delimited, double quotes for escaping).
var csvReaderWithProfile = new CsvReader(CsvProfile.SemiColumnDoubleQuote);
// Custom buffer size for large files.
var csvReaderWithBuffer = new CsvReader(bufferSize: 64 * 1024);
// Both custom profile and buffer size.
var csvReaderCustom = new CsvReader(CsvProfile.SemiColumnDoubleQuote, bufferSize: 16 * 1024);
The ToDataTable
method reads CSV data and returns a DataTable
containing all rows and fields.
DataTable dataTable = csvReader.ToDataTable("example.csv");
or to read from a stream,
using var stream = new FileStream("example.csv", FileMode.Open, FileAccess.Read);
DataTable dataTable = csvReader.ToDataTable(stream);
The ToDataReader
method provides a forward-only, read-only IDataReader
for processing large files efficiently.
using var stream = new FileStream("example.csv", FileMode.Open, FileAccess.Read);
using var reader = csvReader.ToDataReader(stream);
while (reader.Read())
{
Console.WriteLine(reader[0]); // Access the first column of the current row.
}
using var stream = new FileStream("example.csv", FileMode.Open, FileAccess.Read);
foreach (var record in csvReader.ToArrayString(stream))
{
Console.WriteLine(string.Join(", ", record));
}
The To<T>
method maps CSV records to objects of a specified type.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
using var stream = new FileStream("example.csv", FileMode.Open, FileAccess.Read);
IEnumerable<Person> people = csvReader.To<Person>(stream);
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
}