perchè tutti (non solo tu) avete l'abitudine di complicarvi la vita!!!
Allora, leggi riga per riga da un file.
Quella riga che hai letto è una stringa che contiene caratteri blank se vuoi, ma cmq una stringa. Una soluzione ottimizzata in assoluto non esiste, al massimo sai che ad ogni spazio corrisponde un numero (es. il primo blank ce l'hai a 12, il secondo dopo 5 ecc).

Codice PHP:
string string.trim(); 
int ret string.indexOf(" "); 
int index 0
while (
ret 0){
    
index++;
  
ret string.indexOf(" "index );
  } 
alla fine trovo sia leggermente (non so di quanto) migliore dell'andarsi a creare per ogni riga del file un array di stringhe (quello che fa il tokenizer) solo per sapere quante sono (senza cioè guardare al contenuto).

finito quel ciclo scrivi l'output