Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
homuk
0 / 0 / 3
Регистрация: 08.02.2016
Сообщений: 22
#1

Функция слияния двух текстовых файлов

23.03.2017, 19:14. Просмотров 882. Ответов 3
Метки нет (Все метки)

Здравствуйте. Прошу помощи, потому как даже не представляю как можно это реализовать.
Задание: Написать функцию слияния двух текстовых файлов 1 и 2, что бы строки файлов пересекались, т.е.
Строка 1 файла -> Строка 2 файла -> Строка 1 файла -> Строка 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "stdafx.h"
#include <windows.h>
#include <locale>
#include <sstream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main()
{
//////////////////////////////////////////////////////Файл 1//////////////////////////////////////////////////////////////
            int count = -1; //Число символов в файле
            char S; //для подсчета символов
                    /*Просто считаем число символов*/
            ifstream myfile("E:\\1.txt");
            while (!myfile.eof())
            {
                myfile.get(S);
                count++;
            }
            myfile.close();
            char *file1 = new char[count]; //Выделяем память по определенному числу символов
            ifstream myfile2("E:\\1.txt");  //создаем поток для работы с файлом
            int i = 0; //курсор на текущий символ (как номер буквы в слове)
 
            while (!myfile2.eof()) //Проходим по файлу
            {
                myfile2.get(file1[i]); //Записываем символ за символом
                i++; //передвинули курсор для записи следующего символа
            }
            myfile2.close(); //закончили работу с файлом
 
                             //преобразовали весь текст в string из char
            string strtemp = "";
            for (int i = 0; i<count; i++)
            {
                strtemp = strtemp + file1[i];
            }
            printf("-Текст из файла 1.txt:\n%s", strtemp.c_str());
            //////////////////////////////////////////////////////Файл 2//////////////////////////////////////////////////////////////
            int count_2 = -1; //Число символов в файле
            char S_2; //для подсчета символов
                    /*Просто считаем число символов*/
            ifstream myfile3("E:\\2.txt");
            while (!myfile3.eof())
            {
                myfile3.get(S_2);
                count_2++;
            }
            myfile3.close();
            char *file2 = new char[count_2]; //Выделяем память по определенному числу символов
            ifstream myfile4("E:\\2.txt");  //создаем поток для работы с файлом
            int i_2 = 0; //курсор на текущий символ (как номер буквы в слове)
 
            while (!myfile4.eof()) //Проходим по файлу
            {
                myfile4.get(file2[i_2]); //Записываем символ за символом
                i_2++; //передвинули курсор для записи следующего символа
            }
            myfile4.close(); //закончили работу с файлом
 
                             //преобразовали весь текст в string из char
            string strtemp_2 = "";
            for (int i_2 = 0; i_2<count_2; i_2++)
            {
                strtemp_2 = strtemp_2 + file2[i_2];
            }
            printf("\n-Текст из файла 2.txt:\n%s", strtemp_2.c_str());
 
 
            //char S2[];               // строка в которой будем искать символ 0
 
            char *ring = strchr(file1, '\n');                     // поиск символа новой строки в file1
 
            printf("\nНовая строка начинается с %d символа", (ring - S + 1));
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2017, 19:14
Ответы с готовыми решениями:

функция слияния файлов
вообще мне надо сделать сортирову четырех путевым слиянием но это уже хоть что...

Сравнение двух текстовых файлов
Объясните, пожалуйста, как работает код #include&lt;iostream&gt; #include &lt;stdio.h&gt;...

Сравнение двух текстовых файлов
господа есть 2 файла txt как сравнить точно ли информация в первом совпадает со...

Сравнение слов из двух текстовых файлов
И к тому же командная строка закрывается сразу после вывода, ни getchar(), ни...

Обмен содержимым двух текстовых файлов
сделал программу по копипасту содержимого второго файла в конец первого,а нужно...

3
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
23.03.2017, 19:32 #2
Лучший ответ Сообщение было отмечено homuk как решение

Решение

homuk,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <string>
int main()
{
    std::ifstream in1("file1.txt");
    std::ifstream in2("file2.txt");
    std::ofstream out("file3.txt");
    std::string str1, str2;
    while(!in1.eof() || !in2.eof())
    {
        if(in1 >> str1)
            out << str1 << std::endl;
        if(in2 >> str2)
            out << str2 << std::endl;
    }
}
Думаю, вынести код в функцию сможете
1
homuk
0 / 0 / 3
Регистрация: 08.02.2016
Сообщений: 22
24.03.2017, 18:32  [ТС] #3
Цитата Сообщение от Даценд Посмотреть сообщение
homuk,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <string>
int main()
{
    std::ifstream in1("file1.txt");
    std::ifstream in2("file2.txt");
    std::ofstream out("file3.txt");
    std::string str1, str2;
    while(!in1.eof() || !in2.eof())
    {
        if(in1 >> str1)
            out << str1 << std::endl;
        if(in2 >> str2)
            out << str2 << std::endl;
    }
}
Думаю, вынести код в функцию сможете
Вчера не было времени протестировать код. Но как оказалось код полностью каждое слово перемешивает, т.е. были:
Файл 1 с содержанием:
Кликните здесь для просмотра всего текста
1 строка 1 файла
2 строка 1 файла

.......
Файл 2 с содержанием:
Кликните здесь для просмотра всего текста
1 строка 2 файла
2 строка 2 файла

.......
Результат таков:
Кликните здесь для просмотра всего текста
1
1
строка
строка
1
2
файла
файла
2
2
строка
строка
1
2
файла
файла


Добавлено через 7 минут
Результат должен быть таким:
Кликните здесь для просмотра всего текста
1 строка 1 файла
1 строка 2 файла
2 строка 1 файла
2 строка 2 файла

Как я понимаю в этой строке
C++
1
out << str1 << endl;
нужно записывать в файл не одно слово, до пробела, а все слова до символа '\n' перехода на новую строку.
0
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
24.03.2017, 18:35 #4
Лучший ответ Сообщение было отмечено homuk как решение

Решение

homuk,
для строк с пробелами:
C++
10
11
12
13
14
15
16
while(!in1.eof() || !in2.eof())
{
    if(std::getline(in1, str1))
        out << str1 << std::endl;
    if(std::getline(in2, str2))
        out << str2 << std::endl;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2017, 18:35

Построчное сравнение двух текстовых файлов
Написать программу, выполняет построчное сравнивает два текстовые файлы и...

Написать пpогpамму, сpавнивающую содеpжимое двух текстовых файлов
Обработка текстовых файлов. Сравнение. Написать пpогpамму, сpавнивающую...

Проверить, совпадают строки двух данных текстовых файлов. Если не совпадают, то вернуть номер первой такой пары строк
Проверить, совпадают строки двух данных текстовых файлов. Если не совпадают, то...


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

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

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