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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Last_Night
19 / 19 / 0
Регистрация: 02.10.2012
Сообщений: 124
#1

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

20.04.2013, 19:42. Просмотров 1608. Ответов 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
#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++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 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
5417 / 4813 / 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);
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
20.04.2013, 22:16 #10
Цитата Сообщение от Last_Night Посмотреть сообщение
немного по другому сделал
Тоже неплохо. Хотя я не любитель использовать дополнительные переменные (особенно массивы)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 22:16
Привет! Вот еще темы с ответами:

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

Чтение из файла - C++
Из текстового фала например а.txt надо записать данные в заданную структуру при этом должно получиться так: a.txt a b c 1 1 2 3 4 ...

чтение из файла - C++
Доброго времени суток! У меня возникла проблема, касающаяся вывода данных из файла. Не могу понять, с чем это связано void...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.04.2013, 22:16
Ответ Создать тему
Опции темы

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