Я работаю над проектом, в котором мне нужно прочитать текстовый (исходный) файл в памяти и иметь возможность произвольного доступа к нему (например, получить адрес, соответствующий строке 3, столбец 15).
Я хотел бы знать, есть ли установленный способ сделать это, или структуры данных, которые особенно хороши для работы.Я должен быть в состоянии выполнить (вероятно, амортизированный) постоянный доступ времени.Я работаю в C, но готов реализовать структуры данных более высокого уровня, если оно того стоит.
Моя первая идея состояла в том, чтобы использовать связанный список большого буфера, который будет содержать символьные данные файла,Я также сделал бы массив, индекс которого - номера строки, а содержимое - адреса, соответствующие началу строки.Этот массив будет перераспределен при необходимости.
Вспомогательный вопрос: кто-нибудь имеет представление о среднем размере исходного файла?Я был удивлен, что не нашел этого в Google.
Чтобы уточнить:
Файл, который меня беспокоит, является исходными файлами, поэтому их размер должен быть управляемым, онине должен быть изменен, а строки имеют переменную длину (жестко, надеюсь, ограничена на максимуме).
Проблема, над которой я работаю, требует в основном представления файла только для чтения, но я очень заинтересован в поискепроблема.
Заключение:
Существует очень интересное обсуждение структур данных, используемых для поддержки файла (с поддержкой чтения / вставки / удаления) в статье. Структуры данных для текстовых последовательностей .
Если вам просто нужен доступ только для чтения, просто получите размер файла, прочитайте его в памяти с помощью fread (), тогда вы должны поддерживать динамический массив, которыйсопоставляет номера строк (индекс) с указателем на первый символ в строке.Кто-то ниже предложил создать этот массив лениво, что во многих случаях кажется хорошей идеей.