My advice would be to read the entire file into memory, and then parse from there.
I believe it should be plausible to get the time down to under a second
If you read the entire file, you make the hardware work in your favor. After all, the harddrive + our friend the DMA controller, can deliver 50MB per second, and your file is 800k?
Going through a linear char array of 800 000 elements should be fairly straightforward
At least in my spectacularly brilliant mind