2015-12-06 3 views
0

Добрый вечер!C++ чтение определенных частей текстового файла

Я заканчиваю свой первый семестр программирования в этом классе C++ (совершенно новый для программирования) и имеет окончательный проект. То, что нас просят сделать, - создать mock сеть социальных сетей (аналогичную Facebook), где вы можете зарегистрироваться, сделать сообщения, следить за другими пользователями и другие такие основные функции.

Основная идея проекта - написать и добавить новую информацию в текстовый файл и использовать ее в качестве базы данных.

Одна из проблем, с которыми я столкнулся сейчас, заключается в том, что я узнал, что читать только определенную строку файла можно только в том случае, если все строки имеют одинаковую длину. Проблема возникает, когда, например, я хочу просмотреть общедоступную информацию пользователя, такую ​​как их имя и профессия, это то, что мне придется читать из определенной строки, но строки могут содержать различную длину информации. Например, если разные пользователи следуют за разными людьми, это сделает так, чтобы не каждая строка имела одинаковое количество слов.

Вот очень конденсируется скелет код моего проекта до сих пор ради экономии некоторого пространства:

project.cpp (реализация)

#include <iostream> 
#include <string> 
#include "project02.h" 

using namespace std; 

void Login() 
{ 
    //login screen, if user chooses to sign up then it calls setUserInfo() 
} 

//includes setter and getter functions but I won't need to list them here 

project.h (заголовок)

#ifndef PROJECT02_H 
#define PROJECT02_H 

using namespace std; 

void Login(); 

class UserInfo 
{ 
    //class for setting and getting user information 
}; 

projectmain.cpp (основной)

#include <iostream> 
#include <string> 
#include "project02.h" 

using namespace std; 

int main() 
{ 
    Login(); 
    return 0; 
} 

В этом суть. Когда новый пользователь регистрируется, вся введенная информация пользователя добавляется к файлу для последующего использования. Главная проблема сейчас заключается в том, что, когда я буду читать информацию конкретного пользователя позже, я не смогу прочитать определенную строку, если они будут иметь разную длину, поэтому мне было интересно, есть ли у кого-нибудь предложения о том, как я могу подходить к этому проекту с учетом тех видов функциональных возможностей.

Любое понимание будет высоко ценится =)

Edit: Я читаю файлы с ifstream. Это единственный способ, каким я знаю.

+2

как вы читаете файлы? – SnG

+0

Вы структурируете файлы, которые вы читаете, или что-то еще? – CalebB

+0

Будет чтение и запись файлов с ifstream. – BaloneyOs

ответ

0

Вы уже почти заметили проблему. Поскольку нет определенного ответа на вашу проблему, рассмотрите мои подсказки в качестве отправной точки:

  • Учитывая, что строки в вашем файле разделены, например. по строке \n, вы можете, конечно, прочитать определенную строку своего файла. Но вам нужно искать весь файл с самого начала, чтобы найти эту строку, посчитав все пропущенные вами строки.
  • Если все линии имеют одинаковую общую длину, вы можете вычислить позицию в файле, где начинается определенная строка, а затем прочитать ее (см.). Тогда вам, вероятно, понадобится средство маркировки длины ваших линий, потому что вы собираетесь удлинять короткие линии до общей длины.
  • В качестве компромисса, в случае, если вы страдаете тратой дорогостоящего пространства, расширяя многие короткие линии до довольно длинной общей длины, вы можете ввести второй индекс . В этом файле вы просто храните, например. начальные позиции (цифры), которые указывают на фактические данные .Индексы (начальные позиции) могут иметь одинаковую длину (они короткие по сравнению с самими данными), поэтому вы можете легко найти конкретный индекс . Затем используйте это, чтобы просмотреть фактические данные.
  • Вы можете использовать какую-то структуру для своих файлов. Их много, например XML или JSON. Однако большинство из них также просматривают файл, чтобы найти бит информации.
  • Существует много встроенных библиотек баз данных, таких как SQLite или Berkeley DB.
+0

Как реализовать разделительные линии? Позволяет ли мне обойти проблему общей длины? – BaloneyOs

+0

Выпуск 'cout' в конце строки при написании и использовании' std :: getline() 'при чтении, например. Тем не менее, если эти вещи вам неясны, я настоятельно рекомендую продолжить чтение по основным темам, прежде чем вы начнете понимать, как обращаться с структурами данных. – Kamajii

Смежные вопросы