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

Удалить строки из одного файла и записать их в другой - C++

Восстановить пароль Регистрация
 
Arthurtkh
0 / 0 / 0
Регистрация: 26.07.2014
Сообщений: 5
26.07.2014, 14:06     Удалить строки из одного файла и записать их в другой #1
имеется текстовый файл F1.txt. В нем, скажем 10 строк, разделенный знаком каретки(снос строки).
пример:









9и.

в файле F2.txt каждая строка это условие, которое указывает что в какой-то строке в файле F1 ЕСТЬ ОШИБКА.
пример:
1. в строке 2 ошибка.
2. в строке 5 ошибка.
3. в строке 8 ошибка.
программа должна считать строку из второго файла и согласно этому условию удалить строку из первого файла.
причем строка не должна остаться пустой. т.е. удаляется строка и перенос строки. и эта удаленная строка должна записаться в файл F3.txt.
и так пока все строки с ошибкой не будут удалены из 1 файла и записаны в 3ий.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2014, 14:06     Удалить строки из одного файла и записать их в другой
Посмотрите здесь:

C++ Копирование содержимого одного файла в другой посредством командной строки
скопировать данные с одного файла и записать в другой C++
C++ Написать программу записи содержимого из одного файла в другой : Тип файла текстовый
C++ данные из одного стека записать в другой в обратном порядке
C++ Переписать из одного файла в другой только третью и четвертую строки, содержащие пробелы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
26.07.2014, 18:21     Удалить строки из одного файла и записать их в другой #2
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <conio.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::ifstream input_F1("F1.txt");
    if(input_F1)
    {
        std::vector<std::string> F1_info, F2_info;
        std::string str;
        while(getline(input_F1, str)){ F1_info.push_back(str); } input_F1.close();
        std::ifstream input_F2("F2.txt");
        if(input_F2)
        {
            while(getline(input_F2, str)){ F2_info.push_back(str); } input_F2.close();
            // Поиск
            for(unsigned i = 0; i < F2_info.size(); i++)
            {
                unsigned found = F2_info[i].find_last_of(" ");
                str = F2_info[i].substr(0, found);
                found = str.find_last_of(" ");
                str = str.substr(found + 1);
                for(unsigned j = 0; j < F1_info.size(); j++)
                {
                     if(F1_info[j].find(str) != std::string::npos)
                     {
                         F1_info[j].clear();
                         break;
                     }
                }
            }
            // Запись в третий файл
            std::ofstream output("F3.txt");
            for(unsigned j = 0; j < F1_info.size(); j++)
                if(!F1_info[j].empty())
                    output << F1_info[j] << std::endl;
            output.close();
        }
        else perror("Error");
    }
    else perror("Error");
    
    getch();
    return 0;
}
Arthurtkh
0 / 0 / 0
Регистрация: 26.07.2014
Сообщений: 5
26.07.2014, 19:07  [ТС]     Удалить строки из одного файла и записать их в другой #3
Благодарю. Есть возможность написать ту же программу на Паскале?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
26.07.2014, 20:39     Удалить строки из одного файла и записать их в другой #4
Цитата Сообщение от Arthurtkh Посмотреть сообщение
Благодарю. Есть возможность написать ту же программу на Паскале?
Боюсь здесь я вам не помощник. Напишите на ветке Паскаля, кто-то да и отзовётся
Arthurtkh
0 / 0 / 0
Регистрация: 26.07.2014
Сообщений: 5
26.07.2014, 21:33  [ТС]     Удалить строки из одного файла и записать их в другой #5
благодарю. я на этом форуме не ориентируюсь. разберусь где там эта ветка))

Добавлено через 42 минуты
строки записываются в файл 3. но из 1го файла не удаляются
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
26.07.2014, 22:11     Удалить строки из одного файла и записать их в другой #6
Arthurtkh, неправильно прочитал условие задания. Значит, удалённые строки записываются в
файл F3, а F1 файл перезаписывается:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <conio.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::ifstream input_F1("F1.txt");
    if(input_F1)
    {
        std::vector<std::string> F1_info, F2_info;
        std::string str;
        while(getline(input_F1, str)){ F1_info.push_back(str); } input_F1.close();
        std::ifstream input_F2("F2.txt");
        if(input_F2)
        {
            while(getline(input_F2, str)){ F2_info.push_back(str); } input_F2.close();
            //std::ofstream output_F3("F3.txt", std::ios_base::app); // Для записи в конец файла
            std::ofstream output_F3("F3.txt");
            // Поиск
            for(unsigned i = 0; i < F2_info.size(); i++)
            {
                unsigned found = F2_info[i].find_last_of(" ");
                str = F2_info[i].substr(0, found);
                found = str.find_last_of(" ");
                str = str.substr(found + 1);
                for(unsigned j = 0; j < F1_info.size(); j++)
                {
                     if(F1_info[j].find(str) != std::string::npos)
                     {
                         // Запись удалённых строк в файл F3
                         output_F3 << F1_info[j] << std::endl;
                         F1_info[j].clear();
                         break;
                     }
                }
            }
            output_F3.close();
            // Перезапись файла F1
            std::ofstream output_F1("F1.txt");
            for(unsigned j = 0; j < F1_info.size(); j++)
                if(!F1_info[j].empty())
                    output_F1 << F1_info[j] << std::endl;
            output_F1.close();
        }
        else perror("Error");
    }
    else perror("Error");
    
    getch();
    return 0;
}
Yandex
Объявления
26.07.2014, 22:11     Удалить строки из одного файла и записать их в другой
Ответ Создать тему
Опции темы

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