The code looks great. It's pretty fast (if you are using a fairly new version of Tcl, historically, there were some minor versions of Tcl that had problems with buffer management) and how you read the line at a time.
This is slightly faster if you can read in large quantities at the same time, but then you need to have enough memory to store the file. There are usually no problems with files containing several million lines; modern computers can handle these things simply:
set a [open myfile]
set lines [split [read $a] "\n"]
close $a;
foreach line $lines {
}