I'd say Fell and I use the same system, so rather than post what I do, which would just be different variable names, I'll try to explain a bit what is happening here.
First, The entire file gets loaded into memory with a BINARY file read. To load the whole file at once, we find the length of the file LOF(1), as used in Fell's example, and fill a variable with that many spaces: a$ = SPACE$(LOF(1)). If you are not familiar with the GET statement, it is asking to start at the first record in the file, the "1" in the middle, and it grabs as many bytes as defined by the length of the variable, which in this case means get the entire length of the file, or all the records. So those SPACEs are no longer spaces, now they are your complete file records. To parse that mother, we need to step through it and find each instance of the search term, "Error". The INSTR() function has this cool seed feature. Although most of the time we see INSTR() with 2 parameters, the variable followed by the character or characters to search for, the seed option allows us to move the index through our file to the previous find. Fell adds a +1 to that, so the record is indexed one character past the "Error" so essentially the string (file) is now read starting as rror....( and all the rest of the stuff, until the next "Error" term is found in the loop. This continues until the seed, in Fell's example, foundError, is +1 past the "E" in the last "Error" find. That means in the next loop the INSTR() value is zero, and therefore the loop is exited.
Happy parsing!
Pete