if the file can be modified, you should go for a binary format (writing a struct of known size for each record).
That lets you read any record at any position pretty easily (record N is at file seek N x recorSize, starting with first record at index 0) and save a lot of conversion time.