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

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

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

Работа с файлами C++
C++ работа с файлами
Работа с файлами C++
C++ Работа с файлами
C++ работа с файлами на с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2012, 22:06     Работа с файлами. С++ #2
Пункты - это номера строк?
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
23.09.2012, 22:07     Работа с файлами. С++ #3
ваш код пожалуйста.
Fler
207 / 209 / 9
Регистрация: 20.12.2011
Сообщений: 635
23.09.2012, 22:08     Работа с файлами. С++ #4
каким образом эти пункты определены?
пример входного файла в студию, пожалуйста...
Andrey.K
 Аватар для Andrey.K
338 / 259 / 15
Регистрация: 14.11.2010
Сообщений: 480
23.09.2012, 22:11     Работа с файлами. С++ #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Пункты - это номера строк?
ИЗ #include <fstream> есть метод seekg(). Погуглите в его сторону.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
23.09.2012, 23:51  [ТС]     Работа с файлами. С++ #7
Пример входного файла вложил.

Суть в том , что программа предлагает ввести число - 1 или 2 .
Если введенное число 1 , то программа выводит на экран информацию под пунктом 1. Если введенное число 2 , соответственно, информацию под пунктом 2 . Затем записывает выбранную информацию во второй файл.
Вложения
Тип файла: 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();
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
alsav22
5282 / 4801 / 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;
}
prosto-ruslan
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
24.09.2012, 11:50  [ТС]     Работа с файлами. С++ #11
Огромное спасибо всем вам за помощь! )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 12:33     Работа с файлами. С++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 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;
}
Yandex
Объявления
24.09.2012, 12:33     Работа с файлами. С++
Ответ Создать тему
Опции темы

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