Skip to content

MikeStall/DataTable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

##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<T>
  • 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<T, bool> 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<T>() method:

class Entry
{
  public int N { get; set; }
  public int NSquared { get; set; }
}
int y = (from row in dt.RowsAs<Entry>() 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.

About

Class library for working with tabular data, especially CSV files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages