Un file di testo contiene qualcosa che per un essere umano è intelleggibile: di solito lettere e numeri; un file binario è tutto il resto (di cui il file di testo è un insieme di grosso modo 70 caratteri).
(*)Se hai l'obbligo (o necessità) che il file sia sempre intelleggibile (da te o da altri), non c'è molto da fare.
Se invece non è necessario (o si può eventualmente rimandare in altro momento), puoi usare un file binario per memorizzare i dati.
Le precondizioni sono (in sostanza):
1) avere sempre cinquine ( o anche inferiori tipo quaterne etc.)
2) che i numeri non superino il 90.
Dato che si parla di lotto, direi che sono verificate.
In soldoni la mia idea si basa nell'impacchettare i cinque dari in una struttura e scriverla in modo binario nel file. In questo modo ti eviti di parserizzare le varie linee, cercando vari "\n", virgole e in generale di perdere tempo nella ricerca nel file.
Essendo i numeri inferiori a 90 i dati si possono memorizzare tranquillamente in tipi char (per risparmiare spazio).
Un esempio molto grezzo che spero renda l'idea.
(*) Ovviamente se non è vera la precondizione segnata.codice:// Struttura di memorizzazione. struct estrazione { char primo_estratto; char secondo_estratto; char terzo_estratto; char quarto_estratto; char quinto_estratto; }; // calcoli vari delle combinazioni vector<estrazione> combinazioni; ... // N dev'essere un valore valido ovviamente. combinazioni[N].primo_estratto = 10; combinazioni[N].secondo_estratto = 20; combinazioni[N].terzo_estratto = 30; combinazioni[N].quarto_estratto = 40; combinazioni[N].quinto_estratto = 50; // scrittura di tutte le combinazioni in un file. file.write(reinterpret_cast<const char*>(&combinazioni[0]),combinazioni.size()*sizeof(estrazione)); // scrittura di una singola combinazione in un file file.write(reinterpret_cast<const char*>(combinazioni[N]),sizeof(estrazione)); // ricerca della N riga file.seekg( N*sizeof(estrazione), ios::beg); // lettura della N riga. estrazione estr. file.read(reinterpret_cast<char*>(&estr),sizeof(estrazione)); // eventuali rielaborazioni. ... // output. Il cast a int serve per mostrare il numero e non il carattere corrispondente. cout << (int) estr.primo_estratto << endl; cout << (int) estr.secondo_estratto << endl; cout << (int) estr.terzo_estratto << endl; cout << (int) estr.quarto_estratto << endl; cout << (int) estr.quinto_estratto << endl;