Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/53: Рейтинг темы: голосов - 53, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
1

Чтение данных из файла

16.03.2009, 19:05. Показов 9997. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень нужна помощь:
никак не получается написать функцию чтения из файла на С++
Есть на С, но хочу на С++, все никак не выходит
Вот что есть на С:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Bus *readBD(char *fname)
{
    FILE *inf; //указатель на структуру FILE
    Bus x; //буферная переменная структуры Bus
    Bus *buses=0; //если было что-то введено очищаем
    if ((inf=fopen(fname,"r"))==NULL)
      {
        printf("Not file %s\n",fname);
        return 0;
      }
   // fseek(inf,0,0); //задаем текущее положение курсора в начале
    while (!feof(inf))
      {
        fscanf(inf," %s ",&x.fio); //s-строковый тип
        fscanf(inf," %d ",&x.mnomer); //d-десятичный вид
        fscanf(inf," %s ",&x.nombus);
        fscanf(inf," %s ",&x.depo);
        buses=add(buses,x); //добавление
      }
    Print(buses); //функция печать
    fclose(inf); //закрывает поток ввода/вывода
    return buses;
}
а я хочу через

C++
1
ifstream inf(fname, ios_base::in);
Буду очень благодарна, если кто-то поможет, а то я вся замучилась
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2009, 19:05
Ответы с готовыми решениями:

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib>...

Чтение из файла определённого места и сортировка данных исходя из этих данных
Есть некий текстовый документ, содержащий информацию о посещении сайта в формате: Например...

Чтение данных из файла
У меня такая проблема, мне дан бинарный файл, где записаны числа типа float. Мне необходимо их...

Чтение данных из файла
Здравствуйте, в программе нужно прочитать данные из файла и записать результат в ассоциативный...

5
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
16.03.2009, 19:16 2
Покажи, как именно у тебя не выходит.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.03.2009, 20:26 3
функция просто открывает, читает, выводит
Вложения
Тип файла: zip read_file.tar.zip (614 байт, 287 просмотров)
0
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
17.03.2009, 08:02  [ТС] 4
Вот код, в нем есть: Bus *Read_file(char *fname)
Вложения
Тип файла: doc read.doc (39.0 Кб, 217 просмотров)
0
Заблокирован
17.03.2009, 10:39 5
Вообще fscanf сбоит когда файл записывался не fprintf(), знаю т.к. сам не раз на себе испытал, ща попробую чего нить накодить...

Добавлено через 1 час 14 минут 13 секунд
Вот накодил, конечно не оч круто, просто чтоб разобраться можно было)))
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>//getch()
 
typedef struct _BUS {
    char  *fio;
    int   mnomer;
    int   nombus;
    char  *depo;
} BUS, *PBUS, *LPBUS;
 
bool ReadBD(char *fPath, PBUS pBUS);
bool WrieBD(char *fPath, PBUS pBUS);
 
void p1();
void p2();
 
void main()
{
    cout<<"\tMenu\r\n";
    cout<<"1 - zapis' dannih v fail\r\n";
    cout<<"2 - chtenie iz fila\r\n";
    cout<<"Dlya vihoda nazhmite luboi simvol\r\n";
    int key;cin>>key;
    bool repeat = false;
    switch(key)
    {
    case 1:repeat = true;p1();break;
    case 2:repeat = true;p2();break;
    default : break;
    }
    if(repeat)
        main();
}
 
bool ReadBD(char *fPath, PBUS pBUS)
{
    FILE *f;
    bool RetVal = false;
    if( (f = fopen(fPath,"rb+")) )
    {
        fscanf(f,"%s",pBUS->fio);
        fscanf(f,"%d",&pBUS->mnomer);
        fscanf(f,"%d",&pBUS->nombus);
        fscanf(f,"%s",pBUS->depo);
        fclose(f);
        RetVal = true;
    }
    else
        printf("%s\r\n",strerror(ferror(f)));
    return RetVal;
}
 
bool WrieBD(char *fPath, PBUS pBUS)
{
    FILE *f;
    bool RetVal = false;
    if( (f = fopen(fPath,"wb+")) )
    {
        fprintf(f,"%s\r\n",pBUS->fio);
        fprintf(f,"%d\r\n",pBUS->mnomer);
        fprintf(f,"%d\r\n",pBUS->nombus);
        fprintf(f,"%s\r\n",pBUS->depo);
        fclose(f);
        RetVal = true;
    }
    else
        printf("%s\r\n",strerror(ferror(f)));
    return RetVal;
}
 
void p1()
{
    cout<<"Zapis' structuri v file\r\n";
    PBUS pBUS   = (PBUS)malloc(sizeof(BUS));
    pBUS->fio   = (char *)malloc(MAX_PATH);
    pBUS->depo  = (char *)malloc(MAX_PATH);
    char *chBuf = (char *)malloc(MAX_PATH);
    cout<<"Vvedite FIO,bez probelov! : ";
    cin>>pBUS->fio;
    
    cout<<"Vvedite Nomer mesta    : ";
    cin>>pBUS->mnomer;
 
    cout<<"Vvedite Nomer avtobusa : ";
    cin>>pBUS->nombus;
 
    cout<<"Vvedite Nazvanie depo  : ";
    cin>>pBUS->depo;
 
    cout<<"Vvod okonchen\r\n";
    if(!WrieBD("C:\\BD.txt",pBUS))
        cout<<"Oshibka zapisi fila %s\r\n","C:\\BD.txt";
    free((void *)pBUS->fio);
    free((void *)pBUS->depo);
    free((void *)pBUS);
    free((void *)chBuf);
}
 
void p2()
{
    printf("Chtenie structuri iz fila\r\n");
    PBUS pBUS = (PBUS)malloc(sizeof(BUS));
    pBUS->fio  = (char *)malloc(MAX_PATH);
    pBUS->depo = (char *)malloc(MAX_PATH);
    if(!ReadBD("C:\\BD.txt",pBUS))
        printf("Oshibka chteniya fila %s\r\n","C:\\BD.txt");
    else
    {
        printf("Chtenie yspeshno. prosmotr structuri\r\n");
        printf("FIO            : %s\r\n",pBUS->fio);
        printf("Nomer mesta    : %d\r\n",pBUS->mnomer);
        printf("Nomer avtobusa : %d\r\n",pBUS->nombus);
        printf("Nazvanie depo  : %s\r\n",pBUS->depo);
    }
}
Всё проверено и работает 100%!!!Делал в VisualStudio 6.0 ConsoleAplication
0
0 / 0 / 0
Регистрация: 11.03.2009
Сообщений: 38
17.03.2009, 12:31  [ТС] 6
YurA_280784, все супер, спасибо конечно, но мне наоборот не нужно через fscanf, я хочу
что-то типа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Bus *Read_file(char *fname)
{
   Bus x;
   Bus *buses;
   ifstream fin(fname, ios_base::in);
   if (!fin)
   {
        cout<<"Not file "<<fname<<endl;
        return 0;
    }
  
    while (!fin.eof())
    {
        fin>>x.fio;
        fin>>x.mnomer;
        fin>>x.nombus;
        fin>>x.depo;
        buses=add(buses,x);
     }
    Print(buses);
    fin.close();
    return buses;   
}
0
17.03.2009, 12:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2009, 12:31
Помогаю со студенческими работами здесь

Чтение данных из файла
в общем у меня есть файл. в нем с начала идет строка указывающая путь к некому файлу. потом...

Чтение данных из файла
1. Дан файл с именами людей, датами рождения и смерти. Прочитать данные из файла и поместить их в...

Чтение данных из файла
Народ помогите что здесь неправильно,надо прочитать текст из файла и вывести на экран...

Чтение данных из файла С++
Здравствуйте. Дан простой пример потокового ввода/вывода дисковых файлов из Лафоре ООП С++. //...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru