Parsing CSV Row To C# Object

With the widespread popularity of Nuget, there is a package for everything in C#. Parsing CSVs are no exception, but this feels like overkill. Parsing a csv, tsv or any value separated file in C# is not complicated and can be done very easily by simply breaking up the string. It takes a little more work when compared to the simplicity of json serialisation, but it is worth the effort. Particularly if you work for an orginazation that requires nuget packages to be reviewed before adding to an internal repository.

For this example, we will use the following CSV file. You can use this class with pretty much any file that has some kind of value separated data. Tabs are a common alternative that you can easily modify to use this example too.

title,description,price,creationDate<br>
"Converting a csv row to class","Use this class as a template to convert a csv row to a C# class",5.99,2019-01-01 00:00:00

The following class has properties based off the title of this CSV file. We want to skip the first row of course, it wont parse anyway as it will throw an exception due to price not being a decimal and creationDate not being a DateTime. By creating a method called TryParseRow, it falls inline with similar methods we have for the core data types in C# like Int, Double, DateTime and Decimal. The only difference is it doesn’t need to have an out property.

public class MyCSVRowClass
{
	public string Title;
	public string Description;
	public decimal Price;
	public DateTime CreationDate;
	
	
	public bool TryParseRow(string filerow)
	{
		try
		{
			var columns = filerow.Split(';');
			if (columns.Count() == 4) //dont accept a row with a different number of columns. It might be a new column at the end and cause no trouble. It may also be in the middle and screw everything up.
			{
				this.Title = columns[0];
				this.Description = columns[1];
				this.Price = Decimal.Parse(columns[2]); //optionally use try parse if you want to load the row even if one of the columns is invalid.
				this.CreationDate = DateTime.Parse(columns[3]);
				return true;
			}
			else
				return false;
		}
		catch (Exception e)
		{
			return false;
		}
	}
}

Using this class is a simple case of calling MyCSVRowClass.TryParseRow(csv row);. If the method returns a negative response, you know there was a parsing error with the line and you can ignore it. You may have a data file with some optional values in which case you may want to use the try parse methods inside the row parsing method. This way the code will continue parsing the line, even if one property is missing or invalid.

For ease of use, you could create a collection class that wraps up the parsing and file reading into one easy process.

public class MyCSVRowCollection
{
	public List<MyCSVRowClass> Rows;
	
	public void LoadFile(string file)
	{
		using{StreamReader file = new System.IO.StreamReader(file)}
		{		
			while((line = file.ReadLine()) != null)  
			{  
				var lineobj = new MyCSVRowClass();
				if(lineobj.TryParseRow(line))
					this.Rows.Add(lineobj);
			}
		}
	}
}

Related Articles

Related Questions

Whirlpool Oven F6E6: Appliance Manager 1 Board Communication

I have a brand new Whirlpool oven W11I OM1 4MS2 H or (859991549450). I bought it alongside the microwave combi oven. I have had...

Whats the difference between the Tapo P100 and the P105?

There are a few different Tapo smart plugs. The P100 and P110 differ based on the smart power monitoring feature but where does the...

Time remaining keeps going up on Whirlpool dryer??

I have clothes in the dryer regularly and the time remaining shows on the display. There could be 10 mins remaining and if I...

LEAVE A REPLY

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Latest Tools

Memory Converter

Converting values between various metric measurements is usually quite simple as there will be 1000 of the smaller unit in the next larger unit....

Bitrate Converter

Below you will find a bitrate converter. This tool will allow you to enter a bitrate value, in one of many different formats and...

Aesthetic Text Generator

There are various ways to make your social media profile seem more unique, some of which are not as easy to implement as others....

Aspect Ratio Calculator For Images

Aspect ratio is the ratio between the height and width of an image. If you want to resize an image by 100 pixels, you...

Add Text To Image

Use this free tool to add text to an image. Simply select the image file that you want to overlay text onto and you...

JavaScript Multi-line String Builder

Javascript did not always support multi-line strings. If you attempted to create a string variable using quotes, putting a line break into the source...

Latest Posts

Latest Questions