So, the real problem is that in order to use the correct cell processors, you need to know what data in each column. With a valid CSV file (the same number of columns on each row) this is not a problem, but if you are dealing with a CSV file with a variable column, it is difficult.
If, as in the example, only one column is optional, you just need to count the number of columns read and use the appropriate array of cell processors. It doesn't matter where this optional column is, because it is still predictable.
If, however, more than one column is optional, you have a problem. For example, if middleName and city are optional in the following CSV file:
firstName,middleName,lastName,city Philip,Fry,New York
This can be read as:
firstName="Philip", middleName="Fry", lastName="New York", city=null
or
firstName="Philip", middleName=null, lastName="Fry", city="New York"
This is no longer predictable. You can check the data in a column to determine what that column should represent (for example, the date has a / ), but it is not very reliable, and even then you might even need to read a few lines in order to figure it out.