tags:

views:

783

answers:

3

Hi all,

I'm using C# 2005 and the CSVreader class, all works well apart from when the CSV file contains an empty row at the end:

Example:

1,2,3,4,5
2,3,5,6,7
,,,,

My program errors as there are no values here, the problem is that not all columns are contain a value so the 2 rows below would be valid.

1,2,,4,5
2,,5,6,7

but an empty row such containing ,,,, would not. A final hurdle is I don't know for sure how many columns there will be.

How would you suggest I test for an empty row?

Thanks

A: 

Read the entire line and work backwards.

Mitch Wheat
A: 

The way that I have hit a similar problem in the past is to use a reader in between your CSV reader and the actual stream/string that you're reading from. Use the intermediate to eliminate garbage and to check for additional rows etc to prevent the reader from dying horribly on some input which is bad.

Of course if memory isn't an issue then you can simply read the whole string, correct it once, then feed it into your reader.

Spence
+1  A: 

This particular CSVReader looks to have some good handling of missing fields:

A Fast CSV Reader

You can handle an empty row by using some code like this before invoking the reader:

csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;

or replace with an empty string:

csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;

Then you could test for an empty row by looping over it after reading it, and if any column is non-null then process the row.

Turnkey