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

Как считать из файла структуру через разделитель? - C++

Восстановить пароль Регистрация
 
dogik20
0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 12
03.04.2013, 18:59     Как считать из файла структуру через разделитель? #1
C++
1
2
3
4
5
6
7
8
9
10
11
    student *study=new student[counter];
    for (i=0;i<counter;i++)
    {
      fin >> study[i].name;
      fin >> study[i].group;
      fin >> study[i].course;
      for (int k=0;k<5;k++)
      {
      fin >> study[i].sesia[k];
      }
}
в файле записано так
vasa:5:4:3:5:4:2:3:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 18:59     Как считать из файла структуру через разделитель?
Посмотрите здесь:

C++ Считать структуру из файла
Считать структуру из файла C++
Подскажите, как считать из файла структуру C++
C++ считать с файла через ентер
C++ Считать даные из файла в структуру
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
03.04.2013, 19:11     Как считать из файла структуру через разделитель? #2
dogik20, ну вот как-то так...

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
struct student
{
    string name;
    string group,
        course,
        sesia[5];       
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    student *study = new student[2];
 
    ifstream fin("1.txt", ios::in);
 
    for(int i = 0; i < 2; i++)
    {
        getline(fin, study[i].name, ':');
        getline(fin, study[i].group, ':');
        getline(fin, study[i].course, ':');
 
        for (int k = 0;k < 5; k++)
        {
            getline(fin, study[i].sesia[k], ':');
        }
    }
 
    for(int i = 0; i < 2; i++)
    {
        cout << study[i].name << ':';
        cout << study[i].group << ':';
        cout << study[i].course << ':';
 
        for (int k = 0; k < 5; k++)
        {
            cout << study[i].sesia[k] << ':';
        }
        cout << endl;
    }
 
    cout << "\n\n";
    return 0;
}
dogik20
0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 12
03.04.2013, 19:18  [ТС]     Как считать из файла структуру через разделитель? #3
yoghurt92, Видает ошибку на весь getline((
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
03.04.2013, 19:27     Как считать из файла структуру через разделитель? #4
dogik20, а вы подключите

C++
1
#include <string>
dogik20
0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 12
03.04.2013, 19:35  [ТС]     Как считать из файла структуру через разделитель? #5
yoghurt92, моя структура виглядит так
C++
1
2
3
4
5
6
7
struct student
{
    char name[18];
    int group;
    int course;
    int sesia[5];
};
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
03.04.2013, 19:37     Как считать из файла структуру через разделитель? #6
dogik20, тогда измените запись в файле, иначе никак.
dogik20
0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 12
08.04.2013, 02:22  [ТС]     Как считать из файла структуру через разделитель? #7
помогите считать из файла до роздилителя ибо не получается
структура у меня такая

C++
1
2
3
4
5
6
7
struct student
{
    char name[18];
    int group;
    int course;
    int sesia[5];
};
считивать я питаюсь так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fin.open("student.txt",ios::in);
    for (counter=0;!fin.eof();counter++)fin.getline(s, 800);
    student *study=new student[counter];
    fin.clear();fin.seekg(0);
    char *p;
    for (i=0;i<counter;i++)
    {
        fin.getline(s, 800);
        p=strtok(s, ":");strcpy_s(study[i].name, p);
        p=strtok(NULL, ":");study[i].group=atoi(p);
        p=strtok(NULL, ":");study[i].course=atoi(p);
        for(int j=0;j<5;j++)
        {
            p=strtok(NULL, ":");study[i].sesia[j]=atoi(p);
        }
 
    }
сам фаил у меня так виглядае так
[0]Петрович_И.И.:5:4:3:5:4:2:3:
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
08.04.2013, 06:02     Как считать из файла структуру через разделитель? #8
dogik20, у вас ошибка в выделении памяти, и функцией strcpy_s пользоваться не желательно. Вроде всё.
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
 
struct student
{
   char name[18];
   int group;
   int course;
   int sesia[5];
};
 
int main()
{
   std::ifstream fin("student.txt");
 
   if (!fin.is_open())
   {
      std::cerr << "file not opened ..." << std::endl;
      return 1;
   }
 
   char s[800];
 
   size_t counter;
 
   for (counter = 0; !fin.eof(); counter++)
   {
      fin.getline(s, sizeof(s));
   }
 
   student* study = new student[sizeof(student) * counter];
 
   fin.clear();
   fin.seekg(0);
 
   char* p;
   size_t nName = sizeof(student::name);
 
   for (size_t i = 0; i < counter; i++)
   {
      fin.getline(s, sizeof(s));
      p = strtok(s, ":");
 
      strncpy(study[i].name, p, nName);
      study[i].name[nName-1] = 0;
 
      p = strtok(NULL, ":");
      study[i].group = atoi(p);
 
      p = strtok(NULL, ":");
      study[i].course = atoi(p);
 
      for (int j = 0; j < 5; j++)
      {
         p = strtok(NULL, ":");
         study[i].sesia[j] = atoi(p);
      }
   }
 
   for (size_t i = 0; i < counter; ++i)
   {
      std::cout << study[i].name << " "
                << study[i].group << " "
                << study[i].course << " : ";
      for (size_t j = 0; j < 5; ++j)
      {
         std::cout << study[i].sesia[j] << " ";
      }
 
      std::cout << std::endl;
   }
 
   system("pause");
 
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2013, 07:24     Как считать из файла структуру через разделитель?
Еще ссылки по теме:

Считать все слово из файла в структуру C++
C++ Считать с файла в структуру
Как считать структуру из файла и вывести ее? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.04.2013, 07:24     Как считать из файла структуру через разделитель? #9
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <fstream>
#include <iostream>
using namespace std;
 
const int N = 20;
const int S = 5;
const int L = 800;
 
struct student
{
    char name[N];
    int group;
    int course;
    int sesia[S];
};
 
int main()
{
    setlocale(0, "");
    
    ifstream fin;
    fin.open("student.txt", ios::in);
    if (!fin.is_open())
    {
        cerr << "Error!" << endl;
        system("pause");
        return 1;
    }
    
    char s[L];
    size_t counter;
 
    for (counter = 0; !fin.eof(); counter++) 
        fin.getline(s, L);
    
    student *study = new student[counter];
    
    fin.clear();
    fin.seekg(0);
    
    for (int i = 0; i < counter; i++)
    {
       fin.getline(study[i].name, N, ':');
       study[i].group = (fin.get() - 48);
       fin.seekg(1, ios::cur);
       study[i].course = (fin.get() - 48);
       for(int j = 0; j < S; j++)
       {
           fin.seekg(1, ios::cur);
           study[i].sesia[j] = (fin.get() - 48);
       }
       fin.seekg(3, ios::cur);
     }
     
     for (int i = 0; i < counter; ++i)
     {
        cout << study[i].name << ':';
        cout << study[i].group   << ':';
        cout << study[i].course  << ':';
        for(int j = 0; j < S; j++)
            cout << study[i].sesia[j] << ':';
        cout << endl;
      }
      cout << endl;
      system("pause");
      return 0;
}}
Миниатюры
Как считать из файла структуру через разделитель?  
Yandex
Объявления
08.04.2013, 07:24     Как считать из файла структуру через разделитель?
Ответ Создать тему
Опции темы

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