Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Smolya
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 12
1

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

10.05.2015, 09:33. Просмотров 411. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Нужно объединить заданное количество текстовых файлов. Результат слияния заданных файлов должен быть отображен через поток стандартного вывода (сout). При этом содержимое каждого следующего файла должно отображаться после предыдущего без какого-либо промежутка.

У меня проблема с последней частью задания. С помощью getline удаляю конец строки, но это делается во всех строках файла, а мне нужно только в последней удалить и объединить. Возможно нужен другой подход. Буду рад помощи.
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>
   #include <ios>
   using namespace std;  
   int main(int argc, char* argv[]) {
   int i;
   if(argc < 2) {  
    cerr << "Usage: asod source-file target-file" << endl;
    return(0);
   }
   char str[255];
   for(i=1;i<argc;i++){
    ifstream n;
    n.open(argv[i]);
               while(! n.eof()) {
             n.getline(str, 255);
             if(n) cout << str;
          } 
        n.close();      
   }
   return(0); 
   }
Добавлено через 8 минут
Возможно под промежутком имелось: не добавляй ничего нового. И перенос строки остается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2015, 09:33
Ответы с готовыми решениями:

Конкатенация текстовых файлов
Подскажите примерно как действовать. Нужно соединить данные(строки)из 2ух...

Список файлов и конкатенация строк
Здравствуйте. В этом коде std::vector&lt;std::string&gt; Files(0); // вектор с...

Конкатенация + int в строку + открытие множества файлов
Заводил тему, но удовлетворительного ответа не получил. Вот что получилось:...

Обработчик текстовых файлов
Добрый день,прошу помощи в этом нелегком(для меня ) задании ! Написать...

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

5
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
10.05.2015, 10:12 2
Цитата Сообщение от Smolya Посмотреть сообщение
И перенос строки остается.
Скорее всего - ТЗ именно такое. Иначе получается конкатенация файлов + их обрезка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <fstream>
 
void print_file(const char* file) {
    std::ifstream ifs(file);
    std::string buf;
    while (ifs) {
        std::getline(ifs, buf);
        std::cout << buf << std::endl;
    }
}
 
int main (int argc, char *argv[]) {
    for (int i = 0; i < argc; ++i)
        print_file(argv[i]);
}
Смотрите - вместо буферного массива char[255] лучше всё же импользовать именно std::string - не будет проблем с переполнением буфера. Ну или использовать .read .write

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <fstream>
 
void print_file(const char* file) {
    const size_t BUF_SIZE = 2048;
    std::ifstream ifs(file);
    char buf[BUF_SIZE];
    while (ifs) {
        ifs.read(buf, BUF_SIZE);
        std::cout.write(buf, ifs.gcount());
    }
}
 
int main (int argc, char *argv[]) {
    for (int i = 0; i < argc; ++i)
        print_file(argv[i]);
}
0
Smolya
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 12
10.05.2015, 10:29  [ТС] 3
Цитата Сообщение от FraidZZ Посмотреть сообщение
Скорее всего - ТЗ именно такое. Иначе получается конкатенация файлов + их обрезка.
То есть \n никуда не убираю?

Цитата Сообщение от FraidZZ Посмотреть сообщение
Смотрите - вместо буферного массива char[255] лучше всё же импользовать именно std::string - не будет проблем с переполнением буфера. Ну или использовать .read .write
Да, отличный подход. Спасибо!
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
10.05.2015, 10:47 4
Smolya, угу.Только вывод самих файлов. Но тут уж мое ИМХО
0
Smolya
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 12
10.05.2015, 14:55  [ТС] 5
Ну а если подумать, то можно как-то EOF удалять или что-то в этом роде, чтобы реализовать все-таки вывод сразу после предыдущего файла?

Добавлено через 4 часа 3 минуты
Пытался сделать:
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
 #include <iostream>
   #include <fstream>
   #include <ios>
   #include <stdio.h>
   using namespace std;  
   int main(int argc, char* argv[]) {
   int i;
   if(argc < 2) {  
    cerr << "Usage: asod source-file target-file" << endl;
    return(0);
   }
   char k;  
   char p; 
   for(i=1;i<argc;i++){
    ifstream n;
    n.open(argv[i]);
            while(n.read((char *)&k, 1)) { 
            if(k=='\n')
                if (!(n.read((char *)&p, 1)))
                 continue;
             cout << k; 
          } 
        n.close();      
   }
   return(0); 
   }
но он, когда обычный конец строки, то на новой первый символ убирает, т.к. p перешел к новому. Как обратно вернуться на позицию? tellg и seekg не хотят корректно работать.
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
11.05.2015, 02:25 6
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
#include <iostream>
#include <fstream>
using namespace std;  
 
int main(int argc, char* argv[]) 
{
   if(argc < 2) 
   {  
    cerr << "Usage: asod source-file target-file" << endl;
    return(0);
   }
   
   for(int i = 1; i < argc; i++)
   {
    ifstream n(argv[i]);
    if (n)
    {
        cout << n.rdbuf();
        n.close();
     }      
   }
 
   return(0); 
}
0
11.05.2015, 02:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2015, 02:25

Копирование текстовых файлов
Столкнулся с такой проблемой : при копировании из одного файла в другой мне...

Подключение текстовых файлов
Привет. Прошу прощения, если подобная тема уже есть, но я ее не нашел Как...

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


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

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

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