Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
MishaSheva
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 3
#1

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

23.07.2010, 15:59. Просмотров 2695. Ответов 8
Метки нет (Все метки)

Дан текстовый файл, в котором встречаются пустые строки. Надо написать программу которая эти пустые строки из текстового файла удалит, и оставит просто текст. Лазил на форуме ничего подобного нету. Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2010, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлами. Убрать пустые строки (C++):

Отфильтровать в файле пустые строки и убрать пробелы - C++
нужно создать программу фильтр. пустые строки и пробелы убрать. вот часть кода которая есть: #define _CRT_SECURE_NO_WARNINGS ...

Строки и работа с файлами - C++
Дан текст в файле input.txt. Проверяет чтобы после каждой точки предложение начиналось с большой буквы.Корректный текст записывает в файл...

Работа с файлами(не строки) - C++
Не подскажите операторы для работы с файлами. То есть мне нужно вводить в файл элементы(int например) (я знаю что через ifstream), и ЧЕРЕЗ...

Символьные строки. Работа с файлами. - C++
Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,-,*. Найти число таких групп букв, которые...

C++/ работа с текстовыми файлами/строки - C++
Дорогие форумчане, у меня есть лаба, в которой надо смещать все символы вправо, но вот появилась трабла, считывается текст из файла весь, а...

Работа с текстовыми файлами.Удалить строки. - C++
Доброе время суток. Нужна помощь : есть текстовый файл вида: asd qwe zxc rty fgh Нужно переписать строки которые...

8
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
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;
}
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
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
23.07.2010, 16:31 #4
У меня все работает правильно, я проверял. Пустая строка - это строка, которая не содержит ни одного символа (кроме символа \n). Скорее всего, в твоих "пустых строках" есть пробелы и/или символы табуляции
1
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
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);
}
0
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 можно как то реализовать?
0
ForEveR
23.07.2010, 18:08
  #7

Не по теме:

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

0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
23.07.2010, 18:52 #8
Цитата Сообщение от easybudda Посмотреть сообщение
Вот без этой беды... Но на С
Можно и мою прогу переделать, если передавать в функцию test_str строку Cи line.c_str()
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
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;
}
Пустую строку в конце файла вставляет. Можно и это убрать, но лень...
1
23.07.2010, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2010, 19:32
Привет! Вот еще темы с ответами:

Строки, работа с файлами и массивами строк - C++
Требуются срочная помощь :swoon: зачет через 2 часа... Не хватает 2х лаб... помогите люди добрые кто чем может :sorry: Лаба...

Работа с файлами, как определить конец строки - C++
Как установить определение конца строки файла? Подготовьте в «Блокноте» текстовый файл. Напишите программу, которая считывает текст из...

Работа с файлами С++ Строки заменить сроку другим числом! - C++
Дан файл из 5 строк как сделать чтобы можно было заменить любую сроку 1 2 3 или 5 на другое число 1236547 6654879 2312364 и т.д

Работа с файлами, запись строки в файл и чтение из файла - C++
Короче у меня задание типа записать строку в old.txt, потом считать это, найти самое маленькое слово и удалить его, после чего записать...


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

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

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