Tengo un archivo CSV de 10GB que es esencialmente una gran matriz cuadrada. Estoy tratando de escribir una función que pueda acceder a una sola celda de la matriz de la manera más eficiente posible, es decir, la matriz [12345,20000].Acceso aleatorio CSV; C#
Dado su tamaño, obviamente no es posible cargar toda la matriz en una matriz 2D, de alguna manera debo leer los valores directamente desde el archivo.
He buscado en Google el acceso aleatorio de archivos utilizando FileStream.Seek, sin embargo, lamentablemente debido al redondeo variable, cada celda no tiene un ancho fijo. No me sería posible buscar un byte específico y saber qué celda estoy mirando por algún tipo de aritmética.
Consideré escanear el archivo y crear una tabla de búsqueda para el índice del primer byte de cada fila. De esta forma, si quisiera acceder a la matriz [12345,20000] buscaría el inicio de la fila 12345 y luego exploraré la línea, contando las comas hasta que llegue a la celda correcta.
Estoy a punto de probar esto, pero ¿alguien más ha tenido mejores ideas? Estoy seguro de que no sería la primera persona en tratar de lidiar con un archivo como este.
Saludos
Edit: Debo señalar que el archivo contiene una matriz muy escasa. Si el análisis del archivo CSV termina siendo demasiado lento, consideraría convertir el archivo a un formato de archivo más apropiado y más fácil de procesar. ¿Cuál es la mejor manera de almacenar una matriz dispersa?
No veo cómo puede esto evitar tanto buscar como cargar todo en el ram. Es solo un lector secuencial. –