Essentially, `n_data_cols` keeps the current lenghts of `cols`. Why did we have that as a separate variable in the first place?
It's bound to get out of sync. 
Does the code break, if the search and replace `self.n_data_cols` everywhere in `io.ascii` with `len(self.cols)`?
(Sorry, I don't have time to try that today.)