The way I approach this scenario little differently. I would write my own text processor to read non standard csvs I recieve. It's very simple and you can always read any such stuffs using "Regular Expressions"
1. Read the file using C# by line by line.
2. Split the records into columns using RegEx
I will explain with small sample working code:
Regex _Expression;
private StreamReader textReader;
private string CSVSourceFeedPath;
textReader = new StreamReader(CSVSourceFeedPath);
string _Statement = String.Format
("{0}(?=(?:[^{1}]*{1}[^{1}]*{1})*(?![^{1}]*{1}))",
Regex.Escape(";"), Regex.Escape("\""));
RegexOptions _Options = RegexOptions.Compiled | RegexOptions.Multiline;
_Expression = new Regex(_Statement, _Options);
string nextLine;
string[] columns;
nextLine = textReader.ReadLine();
while (nextLine != null)
{
columns = _Expression.Split(nextLine);
if (columns.Length >= 20
{
}
nextLine = textReader.ReadLine();
}