Чтение текстового файла в структуру

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

.txt следующий

fstream write_messages("C:\\Messages.txt");

Строка в .txt выглядит так:

18 [@deniseeee]: привет, как дела? 2016-04-26.23:37:58

Итак, дело в том, что у меня есть список структур

list<Message*> g_messages;

куда

struct Message {
    static unsigned int s_last_id; // keep track of IDs to assign it automatically
    unsigned int id;
    string user_name;
    string content;
    string hour;

    Message(const string& a_user_name, const string& a_content) :
        user_name(a_user_name), content(a_content), id(++s_last_id), hour(currentDateTime())

    {
    }
    Message(){}

};

Я хочу прочитать файл, чтобы сохранить число в идентификаторе списка, слово между «[@» и «]:» в имени пользователя, следующее предложение в содержимом и дату в час.

Как я могу это сделать?

Любая помощь приветствуется

Спасибо


person Fátima Villa González    schedule 27.04.2016    source источник
comment
У вас есть контроль над тем, как пишется этот файл? Вы должны использовать что-то, что легко разобрать: csv, json, xml и т. д.   -  person Vlad Feinstein    schedule 27.04.2016
comment
Этот файл написан с   -  person Fátima Villa González    schedule 27.04.2016
comment
Этот файл написан с помощью write_messages.open("Messages.txt", ios_base::app); write_messages << (*last_iterator)->id<<" [@" << User_name << "]: " << content << " "<<(*last_iterator)->hour << "\n"; write_messages.close();   -  person Fátima Villa González    schedule 27.04.2016


Ответы (1)


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

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

Я бы предложил использовать символ, который вряд ли будет использоваться в тексте, например, вертикальную черту '|'. Кроме того, я бы сначала написал элементы фиксированного размера:

18|2016-04-26.23:37:58|deniseeeee|привет, как дела?

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

person Vlad Feinstein    schedule 27.04.2016
comment
Спасибо! Я пробовал с этим, и это определенно намного проще! - person Fátima Villa González; 27.04.2016