TxtCsvHelper 1.3.3
dotnet add package TxtCsvHelper --version 1.3.3
NuGet\Install-Package TxtCsvHelper -Version 1.3.3
<PackageReference Include="TxtCsvHelper" Version="1.3.3" />
paket add TxtCsvHelper --version 1.3.3
#r "nuget: TxtCsvHelper, 1.3.3"
// Install TxtCsvHelper as a Cake Addin #addin nuget:?package=TxtCsvHelper&version=1.3.3 // Install TxtCsvHelper as a Cake Tool #tool nuget:?package=TxtCsvHelper&version=1.3.3
TxtCsvHelper
TxtCsvHelper is a library to assist in parsing CSV, or any other form of delimited files. You can fill models, fill dynamics, or simply get a list of fields by line.
Installation
Use the package manager console to install TxtCsvHelper.
Install-Package TxtCsvHelper -Version 1.3.3
Usage
using TxtCsvHelper;
To return an IEnumerable<T>. Dynamic types must be IEnumerable<dynamic> Parser can take a StreamReader, Stream, or a string Delimiter if no stream exists (not for use with deserialize or Read) followed by 2 optional parameters: the delimiter string (will default to a comma). A bool if there is a header line (will default to true). Scroll to end for examples
//if you need to change the LineBreak from default Environment.NewLine - Configuration.NewLine = Some string
using(Parser pars = new Parser(streamvar, delimiter: ',', hasHeader: true))
{
//if you want certain NumberStyles, CultureInfo, and/or DateTimeStyles - only necessary if you need custom conversion
//Configuration.CultureInfo = Some Culture Info - will default to CultureInfo.CurrentCulture
//Configuration.NumberStyles = Some Number Style - will default to NumberStyles.Curreny
//Configuration.DateStyles = Some DateTime Style - will default to DateTimeStyles.AssumeLocal
var models = pars.Deserialize<Person>();
}
To read line by line give parser a StreamReader, or a Stream. Set Delimiter to your delimiter if different than a comma. You can get fields in a variety of ways. Scroll to end for examples.
using (StreamReader rs = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr, delimiter: ","))
{
while(parser.Read())
{
List<string> substrings = parser.Substrings;
string s = parser[0];
string ss = parser.GetField(1);
string sss = parser.GetField("FirstName);
int ssss = parser.GetField<int>(3)
int sssss = parser.GetField<int>("Age")
}
}
To return an IEnumerable<string> for each line Parser in this case takes 2 optional parameters: the delimiter string (will default to a comma). A bool if there is a header line (will default to true). SplitLine takes a Line of delimited fields. Scroll to end for examples
using (StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(false, delimiter: ",", HasHeader: true))
{
while(sr.Peek()>=0)
{
var n = parser.SplitLine(sr.ReadLine());
}
}
If no header exists, you may declare the index of the field in the model with [SetIndex()] simply put the index starting with 0 inside the parentheses. You must set HasHeader to false to use SetIndex(). If a header exists but the names do not match your model, you may declare the header name with [HeaderName()] simply put the column name in the parentheses
public class Person
{
[SetIndex(1)]
[HeaderName(Last)]
public string LastName { get; set; }
[SetIndex(0)]
public string FirstName { get; set; }
[SetIndex(2)]
public string MiddleName { get; set; }
[SetIndex(3)]
public int Age { get; set; }
}
Examples:
//Delimiter defaults to "," and HasHeader defaults to true. You can use .ReadAsync() with the same syntax
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr))
{
var models = parser.Deserialize<Person>();
}
//Delimiter defaults to "," and HasHeader defaults to true. You can use .ReadAsync() with the same syntax
//For long lines that do not contain line breaks in fields use .SplitLine() instead - see example at bottom
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr, “\t”))
{
//If you want to read the Header in and read line by line instead of .Deserialize
parser.Read();
//Must call this if you want to reference fields by column name
parser.CacheHeaderRow();
while(parser.Read())
{
string firstName = parser.GetField("FirstName");
string lastName = parser.GetField("LastName");
string middleName = parser.GetField("MiddleName");
int age = parser.GetField<int>("Age");
}
}
//Delimiter defaults to "," and HasHeader defaults to true. You can use .ReadAsync() with the same syntax
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr))
{
//If you want to read line by line. If you want to skip the first (or more) row call parser.Read() before the while loop.
while(parser.Read())
{
string firstName = parser.GetField(0);
string lastName = parser.GetField(1);
string middleName = parser.GetField(2);
int age = parser.GetField<int>(3);
}
}
//Delimiter defaults to "," and HasHeader defaults to true. You can use .ReadAsync() with the same syntax
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr))
{
//If you want to read line by line. If you want to skip the first (or more) row call parser.Read() before the while loop.
while(parser.Read())
{
string firstName = parser[0];
string lastName = parser[1];
string middleName = parser[2];
if(int.TryParse(parser[3], out int i))
{
int age = i;
}
}
}
//Delimiter defaults to "," and HasHeader defaults to true. You can use .ReadAsync() with the same syntax
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(sr))
{
//If you want to read line by line. If you want to skip the first (or more) row call parser.Read() before the while loop.
while(parser.Read())
{
List<string> substrings = parser.Substrings;
//do something with the substrings
}
}
//Use this if you want split strings, you can give .SplitLine any string, it does not need to come from a StreamReader
//this is the most efficient method for long lines that do not contain line breaks in fields
//Delimiter defaults to "," and HasHeader defaults to true
using(StreamReader sr = new StreamReader(postedFile.OpenReadStream()))
using(Parser parser = new Parser(“,”)
{
//if you want to skip the header row/rows call sr.ReadLine() before the loop
while(sr.Peek()>=0)
{
var substrings = parser.SplitLine(sr.ReadLine());
//do something with the substrings
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CSharp (>= 4.7.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.3.3 | 4,018 | 6/24/2022 |
1.3.2 | 459 | 6/20/2022 |
1.3.1 | 688 | 8/2/2021 |
1.3.0 | 399 | 8/1/2021 |
1.2.9 | 392 | 7/12/2021 |
1.2.8 | 410 | 7/1/2021 |
1.2.7 | 395 | 6/21/2021 |
1.2.6 | 343 | 6/21/2021 |
1.2.5 | 374 | 5/17/2021 |
1.2.4 | 375 | 5/15/2021 |
1.2.3 | 370 | 5/11/2021 |
1.2.2 | 344 | 5/10/2021 |
1.2.1 | 333 | 5/9/2021 |
1.2.0 | 352 | 5/9/2021 |
1.1.9 | 359 | 5/9/2021 |
1.1.8 | 422 | 5/8/2021 |
1.1.7 | 360 | 5/8/2021 |
1.1.6 | 350 | 5/8/2021 |
1.1.5 | 412 | 5/7/2021 |
1.1.4 | 412 | 5/7/2021 |
1.1.3 | 431 | 5/7/2021 |
1.1.2 | 403 | 5/6/2021 |
1.1.1 | 363 | 5/6/2021 |
1.1.0 | 379 | 5/6/2021 |
1.0.1 | 377 | 5/6/2021 |
1.0.0 | 368 | 5/6/2021 |