|Syntactic Confectionery Delight|
We also work on this sort of stuff a lot, here are some additional thoughts.
We dropped the requirement for a footer row in favour of an MD5 checksum since it is a better indication of file corruption than a footer count. Once you have an MD5 there's really no need for the count.
>Data records should be easily identified
If you used fixed length records (and therefore fields) save yourself some heartache and make sure that all the record indicators are the same length. Yep, we've seen it done otherwise. When done this way a simple chunk off the front of the record tells you what to expect, gymnastics are required otherwise.
Also leave plenty of space, because at some point there might be variations on record types that are acceptable and a sub version can be handy.
A final anecdote. Dates, how might I **** thee, let me count the ways.
We were involved in rescuing 3 months of data that had been entered where on one of the workstations, and I quote... "Sometimes, on this one, the dates don't work. When that happens we just swap the day and month and it's OK.". Fan*******tastic.