Good stuff here, thanks for taking the time. I developed these iteratively, and it shows. The parentheses on #2 had a purpose in an earlier version, and I didn't think to remove them when I stopped needing them.
As I initially understood the project, I needed to strip all the formatting out of the file. In the actual application, I do end up processing line by line because all the data I need is in the first third of the file (these are only 200-300 lines long), and I actually process less than a dozen of the lines I do read. The real benefit of this project has been, as usual, my education.