Форум программистов, компьютерный форум CyberForum.ru

Структура из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
06.04.2010, 08:53     Структура из файла #1
У меня есть структура
C++
1
2
3
4
5
struct data
{
        string chair;
        vector<string> group;
};
Я объявляю вектор
C++
1
vector<data> c;
и
C++
1
fstream input;
В текстовике у меня хранится информация о кафедрах и их группах, например,

Кафедра математического обеспечения ЭВМ
ПМ-08-1 ПМ-08-2 ПО-09-1 //и т.д.
Кафедра компьютерных технологий
ПК-08-1 ПК-08-2 //и т.д.
//...................и т.д.

Ток не знаю, как удобнее перечислять группы: в столбик или в строку...

Мне из текстового файла нужно считать в нашу структуру информацию, где chair - название кафедры, group - группы в этой кафедре (chair - вектор). Например,

c[0].group[2]="ПО-09-1";
c[1].chair="Кафедра компьютерных технологий";
и т.д.

Добавлено через 16 часов 57 минут
Ну помогите))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
06.04.2010, 13:17     Структура из файла #2
2 значения:исп STL map; а не struct{vector};
p.s если хотите через
C
1
struct
исп stack и пишите в файл
C
1
sizeof(struct);
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
06.04.2010, 16:24  [ТС]     Структура из файла #3
Просто я не знаю что такое исп STL map и исп stack... я ток начал изучать С++ и мне надо сделать задание через vector<>. Просто я уже сделал почти всё задание, исполузуя вектор, осталось именно эта часть, о которой я написал вначале
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
06.04.2010, 16:49     Структура из файла #4
Вот пример с использованием контейнера STL std::map (символ-разделитель - ";"):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::map<std::string, std::vector<std::string> > DB;
    std::string record, chair;
    std::vector<std::string> groups;
    std::ifstream ifs("input.txt");
    //Считывание из файла строки-записи
    while(std::getline(ifs, record))
    {
        groups.clear();
        size_t beg=0, end=0;
        end=record.find(";", beg);
        //Выделение из записи кафедры
        chair=record.substr(beg, end-beg);
        beg=end+1;
        //Заполнение вектора групп
        while((end=record.find(";", beg))!=std::string::npos)
        {
            groups.push_back(record.substr(beg, end-beg));
            beg=end+1;
        }
        //Добавление пары (chair, groups) в ассоциативный контейнер
        DB[chair]=groups;
    }
    //Вывод информации
    for(std::map<std::string, std::vector<std::string> >::const_iterator it1=DB.begin();
        it1!=DB.end(); ++it1)
    {
        std::cout << it1->first << ": " << std::endl;
        for(std::vector<std::string>::const_iterator it2=it1->second.begin();
            it2!=it1->second.end(); ++it2)
            std::cout << "\t" << *it2 << std::endl;
        std::cout << std::endl;
    }
    system("pause");
    return 0;
}
Содержимое файла input.txt:
Код
Кафедра комьютерных технологий;ПО-09-1;ВС-08-1;ВТ-08-1;
Кафедра прикладной информатики;ПИ-07-1;ПМ-09-1;ПМ-09-2;
ЗЫ. В конце последней строки отсутствует переход на новую строку!
ЗЗЫ. Вот тебе и пример, каким образом можно расположить информацию в файле
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
07.04.2010, 07:50  [ТС]     Структура из файла #5
Спасибо большое!
А без std никак нельзя?
Например кусок из моего кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
struct pstr
{
        string group;
        float mass;
    int days;
        bool operator <(const pstr &par) const
        {
                return ((this->mass/this->days) < (par.mass/par.days));
        }
};
 
vector<pstr> p;
fstream ps,os;
int i;
 
void main(int argc, char* argv[])
{
        clrscr();
        
        ps.open("in.txt",fstream::in);
        while(!ps.eof())
        {
                pstr temp;
                ps >> temp.group
                   >> temp.mass
                   >> temp.days;
                p.push_back(temp);
        }
        ps.close();
        sort(p.begin(),p.end());
        
        os.open("out.txt",fstream::out);
        for(i=0; i<p.size(); i++)
        {
                cout << p[i].group << " "
                     << p[i].mass << " "
                     << p[i].days << "\n";
                os << p[i].group << " "
                   << p[i].mass << " "
                   << p[i].days << "\n";
        }
        os.close();
        
        getch();
}
Вот что-то наподобии, только по моему заданию

Добавлено через 10 часов 31 минуту
подскажите
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
07.04.2010, 09:51     Структура из файла #6
Цитата Сообщение от stratovarius Посмотреть сообщение
А без std никак нельзя?
А вот это я не понял...
Цитата Сообщение от stratovarius Посмотреть сообщение
Просто я уже сделал почти всё задание, исполузуя вектор, осталось именно эта часть, о которой я написал вначале
А принцип тот же. Ты хочешь заполнить вектор структур. Тогда опять же нужно построчно считывать записи из файла.
Считал строку - поместил информацию во временную структуру - поместил эту структуру в вектор. И так пока не EOF.
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
07.04.2010, 21:05  [ТС]     Структура из файла #7
Просто вся сложность в том, что я не знаю, сколько кафедр и сколько в них групп, эти количества могут быть разными
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
08.04.2010, 12:01     Структура из файла #8
Допустим, у тебя такая структура файла (т.е. в одной строчке находится информация об одной кафедре и всех группах, которые к этой кафедре относятся):
Код
Кафедра комьютерных технологий;ПО-09-1;ВС-08-1;ВТ-08-1;
Кафедра прикладной информатики;ПИ-07-1;ПМ-09-1;ПМ-09-2;
В цикле while считываешь по одной строке из файла (пока не EOF). Считал одну строку - выделил из нее подстроку до первого знака ";" - это будет информация об кафедре. Поместил эту подстроку во временную структуру. Потом в цикле выделяешь все подстроки, ограниченные знаком ";" - это будут группы, относящиеся к кафедре. Помещаешь их во временную структуру. Помещаешь эту структуру в вектор структур. Считываешь следующую строку.
Собственно, сам разбор строки в моем примере:
  • Строки 18-22 - выделение информации о кафедре
  • Строки 24-28 - выделение информации о группах, которые относятся к этой кафедре
Как видишь, алгоритм позволяет работать с любым количеством кафедр и групп.
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
23.04.2010, 13:27  [ТС]     Структура из файла #9
Nameless One, ещё раз спасибо огромное!

Ток один вопрос: что значит 24 строка в твоём коде?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2010, 13:39     Структура из файла #10
Цитата Сообщение от Nameless One Посмотреть сообщение
while((end=record.find(";", beg))!=std::string::npos)
пока не встретили символ ; делаем ....
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
23.04.2010, 17:35  [ТС]     Структура из файла #11
эт понятно)) а std::string::npos ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2010, 19:02     Структура из файла
Еще ссылки по теме:

C++ Структура TRAIN(считывание из файла)
Непонятная ошибка. Заполнение файла. Структура C++
C++ програма структура из файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2010, 19:02     Структура из файла #12
функция возвращает npos, если не найден символ
Yandex
Объявления
23.04.2010, 19:02     Структура из файла
Ответ Создать тему
Опции темы

Текущее время: 20:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru