Ho un file CSV da 10 GB che è essenzialmente un'enorme matrice quadrata. Sto cercando di scrivere una funzione in grado di accedere a una singola cella della matrice nel modo più efficiente possibile, cioè la matrice [12345,20000].accesso casuale CSV; C#
Data la sua dimensione, non è ovviamente possibile caricare l'intera matrice in un array 2D, ho bisogno di leggere in qualche modo i valori direttamente dal file.
Ho cercato su Google l'accesso casuale ai file utilizzando FileStream.Seek, ma sfortunatamente a causa dell'arrotondamento variabile ogni cella non ha una larghezza fissa. Non sarebbe possibile per me cercare un byte specifico e sapere quale cella sto guardando con una sorta di aritmetica.
Ho considerato la scansione del file e la creazione di una tabella di ricerca per l'indice del primo byte di ogni riga. In questo modo, se volessi accedere alla matrice [12345,20000], cercherò di ricorrere all'inizio della riga 12345 e quindi eseguirò la scansione attraverso la linea, contando le virgole fino a quando raggiungo la cella corretta.
Sto per provarlo, ma qualcun altro ha qualche idea migliore? Sono sicuro che non sarei la prima persona a cercare di trattare un file come questo.
Acclamazioni
Edit: Vorrei sottolineare che il file contiene una matrice molto sparsa. Se l'analisi del file CSV dovesse risultare troppo lenta, prenderei in considerazione la possibilità di convertire il file in un formato di file più appropriato e più facile da elaborare. Qual è il modo migliore per memorizzare una matrice sparsa?
Non vedo come questo possa impedire sia la ricerca che il caricamento di tutti in RAM. È solo un lettore sequenziale. –