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

Форматированное чтение из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
20.04.2013, 19:42     Форматированное чтение из файла #1
Пишу телефонный справочник
нужно из одной строки вытаскивать номер фио и адресс
чёт не выходит ничего((
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
 
struct refBook {
    int num;
    char address[50];
    char fio[50];
} book[500];
 
int main () {
    FILE *f;
    int i = 0;
    f = fopen("e:base.txt","r+");
 
    if (f != NULL) {
        while (!EOF) {
            fscanf(f,"%d %s %s",book[i].num, book[i].fio, book[i].address);
            i++;
        }
    }
    else {
        cout<<"Error file is not found";
    }
    for (int j=0; j<i; j++) {
        cout<<book[j].num<<book[j].fio<<book[j].address;
    }
    getch();
    return 0;
}
либо подскажите как это сделать через fstream
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 19:42     Форматированное чтение из файла
Посмотрите здесь:

C++ C++ / чтение из файла
C++ чтение из файла
C++ Чтение из файла
Чтение из файла C++
Форматированное чтение из файла в массив структур C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 19:51     Форматированное чтение из файла #2
Цитата Сообщение от Last_Night Посмотреть сообщение
чёт не выходит ничего((
Что в файле и что выходит?
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
20.04.2013, 20:03  [ТС]     Форматированное чтение из файла #3
7781122 Name1 Street1
8784545 Name2 Srteet2

данные заданы в таком формате, но можно поставить пробел или /
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 20:34     Форматированное чтение из файла #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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
 
struct refBook {
    int num;
    char address[50];
    char fio[50];
} book[500];
 
int main () {
    FILE *f;
    int i = 0;
    f = fopen("ebase.txt","r+");
 
    if (f != NULL) 
    {
        while (!feof(f)) 
        {
            fscanf(f,"%d%s%s", &book[i].num, &book[i].fio, &book[i].address);
            i++;
        }
    }
    else {
        cout<<"Error file is not found";
    }
    for (int j=0; j<i; j++) 
    {
        cout << book[j].num << ' ' << book[j].fio << ' ' << book[j].address;
        cout << endl;
    }
    
    getch();
    return 0;
}
И двоеточие из имени файла уберите.
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
20.04.2013, 20:54  [ТС]     Форматированное чтение из файла #5
спасибо
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
20.04.2013, 21:30     Форматированное чтение из файла #6
Если в файле записан десятизначный номер мобильного, будет выход за диапазон int. По крайней мере в 32 битной системе. Поэтому номер лучше тоже как массив символов.
Вариант с fstream, рассчитанный на номера до 10 знаков включительно:
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct refBook {
    char num[11];
    char address[50];
    char fio[50];
} book[500];
 
int main() {
    ifstream f;
    f.open("ebase.txt");
    int i = 0;
    if (f) {
        while(!f.eof()) {
            f >> book[i].num >> book[i].fio >> book[i].address;
            if (!f.eof())
                i++;
        }
    } else {
        cout<<"Error file is not found";
    }
    f.close();
    for (int j=0; j<i; j++) {
        cout << book[j].num << " " << book[j].fio << " " << book[j].address << endl;
    }
    return 0;
}
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
20.04.2013, 21:43  [ТС]     Форматированное чтение из файла #7
а как быть если я хочу чтоб данные разделялись занком / или #
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
20.04.2013, 21:53     Форматированное чтение из файла #8
Цитата Сообщение от Last_Night Посмотреть сообщение
а как быть если я хочу чтоб данные разделялись занком / или #
Воспользоваться методом getline. То есть:
C++
1
имя_файловой_переменной.getline(переменная_для_записи, размер_массива, символ_окончания_чтения);
Например, для такого файла:
7781122306/Name1/Street1
8784545/Name2/Srteet2

код:
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct refBook {
    char num[11];
    char address[50];
    char fio[50];
} book[500];
 
int main() {
    ifstream f;
    f.open("ebase.txt");
    int i = 0;
    if (f) {
        while(!f.eof()) {
            //f >> book[i].num >> book[i].fio >> book[i].address;
            f.getline(book[i].num, 11, '/');
            f.getline(book[i].fio, 50, '/');
            f.getline(book[i].address, 50, '\n');
            if (!f.eof())
                i++;
        }
    } else {
        cout<<"Error file is not found";
    }
    f.close();
    for (int j=0; j<i; j++) {
        cout << book[j].num << " " << book[j].fio << " " << book[j].address << endl;
    }
    return 0;
}
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
20.04.2013, 22:04  [ТС]     Форматированное чтение из файла #9
сделал))

Добавлено через 1 минуту
немного по другому сделал
C++
1
2
in.getline(str,100);
            sscanf(str,"%s /%s /%s",book[i].num, book[i].fio, book[i].adr);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 22:16     Форматированное чтение из файла
Еще ссылки по теме:

Чтение из файла C++
Чтение из Файла C++
C++ Чтение из файла

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

Или воспользуйтесь поиском по форуму:
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
20.04.2013, 22:16     Форматированное чтение из файла #10
Цитата Сообщение от Last_Night Посмотреть сообщение
немного по другому сделал
Тоже неплохо. Хотя я не любитель использовать дополнительные переменные (особенно массивы)
Yandex
Объявления
20.04.2013, 22:16     Форматированное чтение из файла
Ответ Создать тему
Опции темы

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