У меня есть CSV-файл 10 ГБ, который представляет собой огромную квадратную матрицу. Я пытаюсь написать функцию, которая может максимально эффективно обращаться к одной ячейке матрицы, то есть к матрице [12345,20000].
Учитывая его размер, очевидно, что невозможно загрузить всю матрицу в двумерный массив, мне нужно как-то прочитать значения непосредственно из файла.
Я гуглил при поиске произвольного доступа к файлу с помощью FileStream.Seek, однако, к сожалению, из-за переменного округления каждая ячейка не имеет фиксированной ширины. Я не смог бы найти конкретный байт и узнать, на какую ячейку я смотрю, по какой-то арифметике.
Я рассмотрел сканирование файла и создание таблицы поиска для индекса первого байта каждой строки. Таким образом, если я захочу получить доступ к матрице [12345,20000], я буду стремиться к началу строки 12345, а затем сканировать строку, считая запятые, пока не достигну правильной ячейки.
Я собираюсь попробовать это, но есть ли у кого-нибудь еще идеи получше? Я уверен, что я не был бы первым, кто попытается разобраться с таким файлом.
Приветствия
Редактировать: я должен отметить, что файл содержит очень разреженную матрицу. Если синтаксический анализ файла CSV окажется слишком медленным, я мог бы рассмотреть вопрос о преобразовании файла в более подходящий и более простой для обработки формат файла. Каков наилучший способ хранения разреженной матрицы?