You could try holding the table in memory. This could be a vector of vectors. Vector a has a Vector b in each position. Vector a represents the rows (One vector b is one row). Each object in vecotr b is an entry of column data.
Read the file a line at a time. One line is one row. When you have a line, parse it into n Strings looking for whitespace. Put each
string into a vector b. When there are no more entries, place vector b in vector a and move onto the next line (row).
You dont have to use vectors, you could use an array of arrays table[][], where table [0][1] is the value in the second column of the first row.
Conceptually tih is a bit like...
row1[ [col1] [col2] [col3] ]
row2[ [col1] [col2] [col3] ]
Hope this helps