Quote by bob j
Let's say there is a file composed of n lines. I do not know the number of lines in advance. I wish to pick k random lines from the file, with one read only (without storing the lines in memory and then doing the rest)...

I think the best you can do is to pick k random distinct integers from {0,...,m} where m is an arbitary number bigger than k. Order the k integers in a list L.
During your one pass through, process the ith line if i is an element in L, skip the rest.
Obviously you will not be able to read k lines if the actual value of n > m. But this is the best I can think of.