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

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

Войти
Регистрация
Восстановить пароль
 
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
#1

Работа с файлами. С++ - C++

23.09.2012, 21:54. Просмотров 674. Ответов 11
Метки нет (Все метки)

Доброго времени суток.
В программировании полный ноль.
Мог бы мне кто нибудь, объяснить как вывести из файла определенную (часть из общей) информацию и записать ее в отдельный.
То есть есть файл , в котором под пунктом 1) есть информация и под пунктом 2) тоже . Необходимо что бы она выводилось на выбор , либо из пункта 1) , либо - 2).
Вывести всю информацию из файла , труда у меня не составляет.. а вот по заданным условиям увы..
Заранее спасибо .
С уважением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлами. С++ (C++):

Работа с файлами в C/C++ - C++
Всем добрый вечер. Ваш форум часто помогал мне, я находил ответы на многие свои вопросы. На сей раз я затупил конкретно. Задание -...

Работа с файлами в C++ - C++
Пишу программу, где предполагается работа с файлами, но при попытке объявления входного потока (istream filein), я получаю ошибку...

Работа с файлами - C++
1.Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл F, содержащий...

Работа с файлами - C++
Задание было такое: Создать телефонный справочник для осуществления следующих операций: Добавление абонентов в базу. Удаление...

Работа с файлами - C++
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл F, содержащий...

Работа с файлами - C++
Помогите пожалуйста, что не правильно,,,не выводит результат в файл #include<iostream.h>; #include<fstream.h>; #include<iomanip>; ...

11
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2012, 22:06 #2
Пункты - это номера строк?
0
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
23.09.2012, 22:07 #3
ваш код пожалуйста.
0
Fler
208 / 210 / 9
Регистрация: 20.12.2011
Сообщений: 635
23.09.2012, 22:08 #4
каким образом эти пункты определены?
пример входного файла в студию, пожалуйста...
0
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
23.09.2012, 22:11 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Пункты - это номера строк?
ИЗ #include <fstream> есть метод seekg(). Погуглите в его сторону.
1
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
23.09.2012, 22:17 #6
начиная с символа '2' скидывает данные в out.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        char c;
        while(ifs.get(c) && c != '2')
        ;
        if(ifs)
        {
            ifs.unget();
            ofs << ifs.rdbuf();
        }
        ifs.close();
        ofs.close();
    }
    else std::cerr << "Unable to open file(s)" << std::endl;
    return 0;
}
1
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 23:51  [ТС] #7
Пример входного файла вложил.

Суть в том , что программа предлагает ввести число - 1 или 2 .
Если введенное число 1 , то программа выводит на экран информацию под пунктом 1. Если введенное число 2 , соответственно, информацию под пунктом 2 . Затем записывает выбранную информацию во второй файл.
0
Вложения
Тип файла: txt in.txt (165 байт, 4 просмотров)
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 23:59  [ТС] #8
igorrr37 , спасибо Вам.
Но к примеру если у меня в первом пункте встретится число с символом 2, то программа будет выводить как и первый пункт , так и второй.
И я не понял как понять этот элемент кода :

C++
1
2
3
4
5
if(ifs)
{
    ifs.unget();
    ofs << ifs.rdbuf();
}
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
24.09.2012, 09:09 #9
unget() делает доступным для чтения считанный символ сдвигая гетпоинтер буфера ifs назад на одну позицию, в следующей строке в ofs выводится всё из буфера ifs начиная с гетпоинтера.
Вот более удобный метод
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>
#include <string>
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        std::string s;
        char c;
        while(ifs.get(c))
            s += c;
        std::string::size_type ind1(s.find("1.")), ind2(s.find("2.", ind1));
        if(ind1 != std::string::npos && ind2 != std::string::npos)
        {
            std::cout << "Input number: ";
            switch(std::cin.get())
            {
                case '1':
                    ofs << s.substr(ind1, ind2 - ind1);
                    break;
                case '2':
                    ofs << s.substr(ind2);
                    break;
            }
        }
        ifs.close();
        ofs.close();
    }
    else std::cerr << "Unable to open file(s)" << std::endl;
    return 0;
}
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.09.2012, 11:39 #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    char n = 0;
    cout << "Введите номер пункта ";
    cin >> n;
    
    ifstream fin("in.txt");
    if (!fin.is_open()) 
    {
        cout << "Ошибка при открытии файла для чтения\n";
        system("pause");
        return 0; 
    }
    
    ofstream fout("out.txt");
    if (!fout.is_open()) 
    {
        cout << "Ошибка при открытии файла для записи\n";
        system("pause");
        return 0; 
    }
    
    string str;
     
    while (!fin.eof())
    {
        getline(fin, str);
        if (!str.empty() && *(str.begin()) == n) break;
    }
    
    if (!fin.eof()) fout << str << endl;
    
    while (!fin.eof())
    {
        getline(fin, str);
        if (str.empty()) break;
        fout << str << endl;
    }
            
    fin.close();
    fout.close();
    
    system("pause");
    return 0;
}
1
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
24.09.2012, 11:50  [ТС] #11
Огромное спасибо всем вам за помощь! )
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.09.2012, 12:33 #12
Немного упростил:
Код
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    char n = 0;
    cout << "Введите номер пункта ";
    cin >> n;
    
    ifstream fin("in.txt");
    if (!fin.is_open()) 
    {
        cout << "Ошибка при открытии файла для чтения\n";
        system("pause");
        return 0; 
    }
    
    ofstream fout("out.txt");
    if (!fout.is_open()) 
    {
        cout << "Ошибка при открытии файла для записи\n";
        system("pause");
        return 0; 
    }
    
    while (!fin.eof()) //ищем строку в файле, первый символ которой равен n
    {
        if (fin.peek() == n) break; //если найдена, то выход
        fin.ignore(255, '\n'); //если первый символ не совпадает, то строка пропускается
    }
     
    string str;
    
    while (!fin.eof()) //если найдена такая строка, то читаем и записываем строки
                       // до первой пустой строки, или до конца файла
    {
        getline(fin, str); 
        if (str.empty()) break; 
        fout << str << endl; 
    }
            
    fin.close();
    fout.close();
    
    system("pause");
    return 0;
}
0
24.09.2012, 12:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 12:33
Привет! Вот еще темы с ответами:

Работа с файлами - C++
Привести пример создания, просмотра и дополнения числового файла на языке С++

Работа с файлами - C++
Доброе время суток. Работа с файлами 1. Вывести на экран текст программы. 2. Вывести на экран текст программы, но...

Работа с файлами - C++
Здравствуйте, делаю задачку &quot;Выборочная сортировка&quot;, но застрял на работе с файлами, понять не могу никак... нужно считать числа из...

работа с файлами - C++
лет 5 назад изучал с++ консольный еще в технаре. Щас php считаю более востребован да и проще. Для интереса подскажите какои оператор...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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