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

Чтение из файла в массив до разделителя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
venom_
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 8
06.12.2012, 01:23     Чтение из файла в массив до разделителя #1
Добрый вечер!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream.h>
#include <iostream.h>
#include <stdlib.h>
#define STOP "---"
main ()
{
int nt[100],i=0;
ifstream f; f.open("kurs.txt");
while (!f.eof())
{f>>nt[i]; cout<<nt[i]<<endl; i++;}
cin.get();
f.close();
}
это программа которая читает данные из файла в массив
файл kurs.txt:
1
2
3
---
Ivanov
Petrov
Sidorov
---
подскажите пожалуйста, как измнить программу чтоб она читала данные в массив int только до разделителя?

Добавлено через 33 минуты
сделал. выкладываю текст програмы, может кому то пригодится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <fstream.h>
#include <iostream.h>
#include <stdlib.h>
#define STOP "---"
main ()
{
int nt[100],i=0;
ifstream f; f.open("kurs.txt");
while (!f.eof()&&f>>nt[i]!=0)
{cout<<nt[i]<<endl; i++;}
cin.get();
f.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 01:23     Чтение из файла в массив до разделителя
Посмотрите здесь:

Чтение файла в массив строк C++
Чтение из файла в массив C++
Неполное чтение из файла в массив C++
C++ Чтение из файла в массив string
C++ Чтение из файла в массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
06.12.2012, 01:39     Чтение из файла в массив до разделителя #2
venom_, вам, как минимум, надо считывать тогда в string (или массив char), и, если число, то переделывать в int, иначе получите неадекватное поведение программы. Думаю, это вам будет сложно, поэтому советую сделать так: в файле в первой строке содержится число, равное количеству нужных элементов, например так:
Код
3
1
2
3
Ivanov
Petrov
Sidorov
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,561
Записей в блоге: 17
06.12.2012, 01:58     Чтение из файла в массив до разделителя #3
ф-ция getline() http://www.cplusplus.com/reference/string/getline/
venom_
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 8
08.12.2012, 23:43  [ТС]     Чтение из файла в массив до разделителя #4
вот какая прога получилась:
может ее можно было сделать проще? буду очень признателен за ответ
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
79
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#define MAXTIT 40
#define MAXCOLS 20
#define STOP "-"
main()
{
struct row {char value[64];};
struct integer {char title[MAXTIT];int value[50];} nt[MAXCOLS];
struct real {char title[MAXTIT];double value[50];} ft[MAXCOLS];
struct stringn {char title[MAXTIT];struct row str[50];} chn[MAXCOLS];
struct string {char title[MAXTIT];struct row str[50];} ch[MAXCOLS];
char tmp1[60];int i=0,nti=0,n,l;
cout<<"Љ®«"<<"ђп¤"<<"‡**з"<<endl<<endl;
ifstream f; f.open("kurs.txt");
while (!f.eof())
 {
f.get(tmp1[0]);
switch (tmp1[0]){
 
 
case 'i':f.getline(nt[i].title,sizeof(nt[i].title));
cout<<nt[i].title<<endl;
f.getline(tmp1,sizeof(tmp1));
while (strcmp(tmp1,STOP))
 {
nt[i].value[nti]=atoi(tmp1);
cout<<i<<" "<<nti<<" "<<nt[i].value[nti]<<endl;
nti++; f.getline(tmp1,sizeof(tmp1));
 }
nti=0; i++; break;
 
 
case 'f':f.getline(ft[i].title,sizeof(ft[i].title));
cout<<ft[i].title<<endl;
f.getline(tmp1,sizeof(tmp1));
while (strcmp(tmp1,STOP))
 {
ft[i].value[nti]=atof(tmp1);
cout<<i<<' '<<nti<<' '<<ft[i].value[nti]<<endl;
nti++; f.getline(tmp1,sizeof(tmp1));
 }
nti=0; i++; break;
 
 
case 'c':f.getline(ch[i].title,sizeof(ch[i].title));
cout<<ch[i].title<<endl;
f.getline(ch[i].str[nti].value,sizeof(ch[i].str[nti].value));
while (strcmp(ch[i].str[nti].value,STOP))
 {
cout<<i<<' '<<nti<<' '<<ch[i].str[nti].value<<endl; nti++;
f.getline(ch[i].str[nti].value,sizeof(ch[i].str[nti].value));
 }
nti=0;i++;break;
 
 
case 'n':f.getline(chn[i].title,sizeof(chn[i].title));
cout<<chn[i].title<<endl;
f.getline(tmp1,sizeof(tmp1));
n=atoi(tmp1);
f.getline(tmp1,sizeof(tmp1));
while (strcmp(tmp1,STOP))
 {
for (l=0;l<n;l++) chn[i].str[nti].value[l]=tmp1[l];
chn[i].str[nti].value[l]=NULL;
l=0;
cout<<i<<' '<<nti<<' '<<chn[i].str[nti].value<<endl;
f.getline(tmp1,sizeof(tmp1));nti++;
 
 }
nti=0;i++;break;
 
}
 }
f.close();
cin.get();
}
файл kurs.txt
iNumber
1
2
3
-
fSalary
15678.87
16450.8
20089.45
-
iBirth
1986
1987
1989
-
nJob
5
Manager
Ingeneer
Director
-
cName
Ivanov
Petrov
Sidorov
-
Добавлено через 5 минут
обратите внимание на маленькие значения MAXCOLS 60 (єто число колонок) и количества строк 50- согласитесь маловато для базы данных но нельзя сделать больше почему то (ошибка Array size too large)
Yandex
Объявления
08.12.2012, 23:43     Чтение из файла в массив до разделителя
Ответ Создать тему
Опции темы

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