C++ Запрос определенной строки из файла

Есть ли способ открыть файл, содержащий большой объем данных, и получить только одну конкретную строку или индекс, не получая при этом остального содержимого?

Обновлять:

Основываясь на том, что другие упомянули здесь в комментариях, у меня есть несколько дополнительных вопросов.

Может ли кто-нибудь дать мне пример того, как установить фиксированную ширину для строк / разрывов строк (как бы вы это ни называли) или показать мне хороший источник, где я могу прочитать об этом больше?

Значит, если я настрою это правильно, я смогу сверхбыстро получить конкретную строку из файла, даже если он содержит несколько миллионов строк?

Это зависит от структуры файла. Все ли строки одинаковой длины? Вам нужно добавить больше деталей.

Johnny Mopp 02.08.2018 16:15

Если бы строки имели одинаковый размер (на диске), это могло бы быть иначе, я так не думаю.

Marco 02.08.2018 16:16

в файлах нет строк (и столбцов). Это просто поток битов и байтов. Только если, как уже предлагали другие, строки имеют фиксированную ширину, вы можете перейти к определенной позиции внутри файла, не читая символ за символом, чтобы увидеть, есть ли разрыв строки

463035818_is_not_a_number 02.08.2018 16:20

@johnnymopp Я хочу знать, как я могу создать эту структуру и какой файл мне нужно использовать в этом случае, если это возможно. Я открыт для любых вариантов. На данный момент данных нет, планирую заранее

QrazyNeo 02.08.2018 16:21

О какой структуре вы говорите? Это удобочитаемый формат или двоичный?

Thomas Matthews 02.08.2018 16:40

Основываясь на том, что другие упомянули здесь в комментариях, у меня есть несколько дополнительных вопросов. Я обновил свой вопрос. @Thomasmatthews, как насчет того и другого :)

QrazyNeo 02.08.2018 16:48

При создании файла используйте setw для установки ширины поля. Также убедитесь, что в строках одинаковое количество полей.

Thomas Matthews 02.08.2018 16:56

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

Thomas Matthews 02.08.2018 16:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
221
1

Ответы 1

Если вы хотите получить доступ к файлу по записям или строкам, а строки не имеют фиксированной длины, вам придется создать структуру, в которой вы можете связать (или сопоставить) позиции файлов с индексами строк.

Рекомендую использовать std::vector<std::streampos>.

Прочтите файл .
Когда файл находится в начале строки, прочтите положение файла и добавьте его к вектору.

Если вам нужен доступ к строке в файле:
1) Используйте вектор, чтобы получить положение строки в файле. 2) Перейдите к строке, используя позицию файла.

Этот метод работает с рядами фиксированной и переменной длины.

Я не хочу читать весь файл. Я хочу начать с правильного момента

QrazyNeo 02.08.2018 17:07

Если вы не хотите строить вектор позиций файла, сделайте строки в файле фиксированной длины. Вы можете захотеть записать структуры в двоичный файл. Поищите в Интернете "сериализацию C++" или "сериализацию C++ boost".

Thomas Matthews 02.08.2018 17:48

Спасибо. Но как мне начать сканирование файла с этой конкретной позиции и пропустить все, прежде чем

QrazyNeo 02.08.2018 21:26

Другие вопросы по теме