произвольный доступ к CSV; C #

У меня есть CSV-файл размером 10 ГБ, который по сути представляет собой огромную квадратную матрицу. Я пытаюсь написать функцию, которая может получить доступ к одной ячейке матрицы как можно более эффективно, то есть матрицу [12345,20000].

Учитывая его размер, очевидно, что невозможно загрузить всю матрицу в 2D-массив, мне нужно каким-то образом прочитать значения прямо из файла.

Я искал в Google поиск произвольного доступа к файлу с помощью FileStream.Seek, но, к сожалению, из-за округления переменных каждая ячейка не имеет фиксированной ширины. Я не смог бы найти конкретный байт и узнать, на какую ячейку я смотрю, с помощью какой-то арифметики.

Я подумал о сканировании файла и создании таблицы поиска для индекса первого байта каждого ряд. Таким образом, если бы я хотел получить доступ к матрице [12345,20000], я бы перешел к началу строки 12345, а затем просканировал бы строку, считая запятые, пока не дойду до нужной ячейки.

Я собираюсь попробовать это, но есть ли у кого-нибудь еще идеи получше? Я уверен, что не буду первым, кто попробует разобраться с таким файлом.

Ура

Редактировать: Я должен отметить, что файл содержит очень разреженную матрицу. Если синтаксический анализ файла CSV оказывается слишком медленным, я бы подумал о преобразовании файла в более подходящий и более простой для обработки формат. Как лучше всего хранить разреженную матрицу?

6
задан user593062 27 January 2011 в 23:54
поделиться