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

Работа с файлами. Убрать пустые строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
MishaSheva
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 3
23.07.2010, 15:59     Работа с файлами. Убрать пустые строки #1
Дан текстовый файл, в котором встречаются пустые строки. Надо написать программу которая эти пустые строки из текстового файла удалит, и оставит просто текст. Лазил на форуме ничего подобного нету. Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.07.2010, 16:15     Работа с файлами. Убрать пустые строки #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
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
 
int main (void)
{
    std::fstream io("input.txt", std::ios::in | std::ios::out);
    if(!io)
    {
        std::cerr << "Can't open file" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    std::stringstream ss;
    ss << io.rdbuf();
    io.seekp(0);
    std::string line;
    while(std::getline(ss, line))
        if(!line.empty())
            io << line << std::endl;
    system ("pause");
    return 0;
}
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
23.07.2010, 16:27     Работа с файлами. Убрать пустые строки #3
Nameless One, ваш код у себя запустил, он работает не корректно когда в файле больше одной пустой строки например если файл :
Код
C sharp

plus
с plus
:) ;-----[[[[[

aaaaaaa
то программа выдает
Код
C sharp
plus
с plus
:) ;-----[[[[[
aaaaaaa
aa
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.07.2010, 16:31     Работа с файлами. Убрать пустые строки #4
У меня все работает правильно, я проверял. Пустая строка - это строка, которая не содержит ни одного символа (кроме символа \n). Скорее всего, в твоих "пустых строках" есть пробелы и/или символы табуляции
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.07.2010, 17:26     Работа с файлами. Убрать пустые строки #5
Цитата Сообщение от Nameless One Посмотреть сообщение
Скорее всего, в твоих "пустых строках" есть пробелы и/или символы табуляции
Вот без этой беды... Но на С
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
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int test_str(const char * s){
    while ( isspace(*s) )
        ++s;
    return *s;
}
 
#define IN_NAME "in.txt"
#define OUT_NAME "out.txt"
 
int main(void){
    char buf[BUFSIZ];
    FILE * fin, * fout;
    
    if ( ( fin = fopen(IN_NAME, "r") ) == NULL ){
        fprintf(stderr, "Can't open input file!\n");
        exit(EXIT_FAILURE);
    }
    
    if ( ( fout = fopen(OUT_NAME, "w") ) == NULL ){
        fprintf(stderr, "Can't open output file!\n");
        exit(EXIT_FAILURE);
    }
    
    while ( fgets(buf, BUFSIZ, fin) ){
        if ( test_str(buf) ){
            if ( fprintf(fout, "%s", buf) < 0 ){
                fprintf(stderr, "Can't write to output file!\n");
                exit(EXIT_FAILURE);
            }
        }
    }
    if ( ferror(fin) ){
        fprintf(stderr, "Can't read from input file!\n");
        exit(EXIT_FAILURE);
    }
    
    fclose(fin);
    fclose(fout);
    fprintf(stderr, "Done.\n");
    
    exit(EXIT_SUCCESS);
}
MishaSheva
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 3
23.07.2010, 17:56  [ТС]     Работа с файлами. Убрать пустые строки #6
Цитата Сообщение от Nameless One Посмотреть сообщение
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 <sstream>
#include <string>
#include <fstream>
 
int main (void)
{
    std::fstream io("input.txt", std::ios::in | std::ios::out);
    if(!io)
    {
        std::cerr << "Can't open file" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    std::stringstream ss;
    ss << io.rdbuf();
    io.seekp(0);
    std::string line;
    while(std::getline(ss, line))
        if(!line.empty())
            io << line << std::endl;
    system ("pause");
    return 0;
}
а в С++ Builder можно как то реализовать?
ForEveR
23.07.2010, 18:08
  #7

Не по теме:

MishaSheva, Попробуйте .h после каждого заголовочного файла поставить... Хотя не уверен что поможет

Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.07.2010, 18:52     Работа с файлами. Убрать пустые строки #8
Цитата Сообщение от easybudda Посмотреть сообщение
Вот без этой беды... Но на С
Можно и мою прогу переделать, если передавать в функцию test_str строку Cи line.c_str()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2010, 19:32     Работа с файлами. Убрать пустые строки
Еще ссылки по теме:

Работа с файлами, запись строки в файл и чтение из файла C++
C++ C++/ работа с текстовыми файлами/строки
Отфильтровать в файле пустые строки и убрать пробелы C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.07.2010, 19:32     Работа с файлами. Убрать пустые строки #9
на С++ я бы так сделал
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
#include <iostream>
#include <fstream>
#include <string>
    
bool empty_string(const std::string & s){
    return s.empty() || s.find_first_not_of(" \t\n") == std::string::npos;
}
 
int main(){
    const char * IN_NAME = "in.txt";
    const char * OUT_NAME = "out.txt";
    std::string buf;
    
    std::ifstream ifs(IN_NAME);
    if ( ! ifs.is_open() ){
        std::cerr << "Can't open input file!" << std::endl;
        return 1;
    }
    
    std::ofstream ofs(OUT_NAME);
    if ( ! ofs.is_open() ){
        std::cerr << "Can't open output file!" << std::endl;
        return 1;
    }
    
    while ( std::getline(ifs, buf) ){
        if ( ! empty_string(buf) ){
            ofs << buf << std::endl;
            if ( ofs.bad() ){
                std::cerr << "Can't write to output file!" << std::endl;
                return 1;
            }
        }
    }
    if ( ifs.bad() ){
        std::cerr << "Can't read from input file!" << std::endl;
        return 1;
    }
    
    ifs.close();
    ofs.close();
    std::cerr << "Done." << std::endl;
    
    return 0;
}
Пустую строку в конце файла вставляет. Можно и это убрать, но лень...
Yandex
Объявления
23.07.2010, 19:32     Работа с файлами. Убрать пустые строки
Ответ Создать тему
Опции темы

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