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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
stratovarius
13 / 13 / 0
Регистрация: 12.07.2009
Сообщений: 114
#1

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

06.04.2010, 08:53. Просмотров 1103. Ответов 11
Метки нет (Все метки)

У меня есть структура
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 минут
Ну помогите))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2010, 08:53     Структура из файла
Посмотрите здесь:

програма структура из файла - C++
написал програму но не работает поиск в функции( помогите/исправте что не так в програме записуем в файл инфу и по параметру znak...

Структура Train. Считывание из файла - C++
Всем привет. У меня такая задача. Описать структуру с именем TRAIN, содержащую следующие поля:-название пункта назначения;-номер...

Структура TRAIN(считывание из файла) - C++
Знаю что много тем на эту структуру TRAIN, но я не нашел именно эту программу.(помогите доработать эту программу) Нужно: В файле...

Неправильно считывается структура из файла - C++
Записываю структуру А в файл, затем считываю в структуру В. Символы считываются нормально, а вот цвет фона+символа неправильно. ...

Структура memo файла DBT - C++
Доброго времени суток. Пишу программу которая должна открывать файлы формата .DBF, в которых имеются поля типа MEMO, как понимаю данный тип...

Структура, запись из файла в массив - C++
Всем привет, очень нуждаюсь в вашей помощи делаю лабу #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;iostream.h&gt; #include...

Запись и чтение из файла. Структура. Сортировка - C++
Здравствуйте. Мне нужно составить программу. Я написал, часть программы, мне нужно производить чтение и запись в файл (в самом файле должно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
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
ниначмуроФ
834 / 518 / 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++
Надо заполнить файл информацией: название товара, тип количества товара, сорт товара, количество, цена. Ето все в структуре. Визуалка...

Структура. Чтение файла. Функция strcmp - C++
Код программы. #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; struct STADION{char *name;char...

Возращение количества байт. Структура и чтение с файла - C++
Проверяет и не хочет ничего выводить. В чем проблема? while(1) { if(sizeof(inf) != fread(&amp;inf, sizeof(inf),1,f)) break; ...

Структура Карточка спортсмена, реализовать считывание данных из файла - C++
пытался переделать программу, но компилятор виснет намертво Задача:На каждого из спортсменов, заявленных на областных соревнованиях по...

Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) - C++
Рабочий код: Структура в заголовочном файле: struct contact{ int ID; std::string Name; std::string Surname; std::string...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru