Need help with DataTable?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

MikeStall
135 Stars 60 Forks Other 151 Commits 19 Opened issues

Description

Class library for working with tabular data, especially CSV files

Services available

!
?

Need anything else?

Contributors list

C# project for reading and writing CSVs

Fast streaming CSV parser. Libraries for easy reading, writing, and manipulation of CSV files. Is able to handle:

  • CSV file format corner cases including escaped values, newlines, and error recovery
  • Linq and binding CSV rows directly to .NET objects
  • Creating tables from
    IEnumerable
  • In-memory mutable tables
  • Streaming through large tables.
  • Dictionaries
  • 2D-Dictionary support and converting to CSVs. Great for sparse-arrays.

It's an easier data table than

System.Data.DataTable
.

The following nuget packages are available:

A few quick examples:

Download as CsvTools from Nuget to include in your C# project:

using DataAccess;
// See methods on DataTable.New for loading a DataTable.
var dt = DataTable.New.ReadLazy(filename); // Fast streaming load a CSV from disk. 

Get a mutable datatable:

MutableDataTable dt = DataTable.New.ReadCsv(filename); // load entire CSV into memory for mutation 
int totalRows = dt.NumRows;

// Includes mutation methods like: // CreateColumn, ReorderColumn, KeepColumns, RenameColumn, // GetRow(int rowIndex), KeepRows(Func predicate)

dt.SaveCsv(filename); // write back out

Linq against the rows:

var y = from row in dt.Rows where row["N"] == "3" select row["NSquared"];

Linq with strongly-typed parsing, using

RowAs()
method:

class Entry
{
  public int N { get; set; }
  public int NSquared { get; set; }
}
int y = (from row in dt.RowsAs() where row.N == 3 select row.NSquared).First();

Create a table around an

IEnumerable
and then save back as a CSV:

var x = from i in Enumerable.Range(1, 5) select new { N = i, NSquared = i * i };
DataTable dt = DataTable.New.FromEnumerable(x);
dt.SaveToStream(Console.Out); // write back out as a CSV

Also includes support for reading an excel file (.xlsx):

var dt = DataTable.New.ReadExcel(@"c:\temp\foo.xlsx");
var names = from row in dt.Rows where int.Parse(row["age"]) > 10 select row["Name"];

See here for more about reading excel.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.