Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/50: Рейтинг темы: голосов - 50, средняя оценка - 4.84
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69

Удалить пустые строки из файла

15.01.2012, 19:57. Показов 10825. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые строки из текстового файла, при условии, что текстовый файл уже существует и в нем встречаются пустые строчки
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2012, 19:57
Ответы с готовыми решениями:

Удалить все пустые строки из файла
Помогите пожалуйста написать функцию на Visual C++ : удалить все пропущенные (пустые) строки файла Спасибо

Удалить в текстовом файле все пустые строки
Задан текстовый файл, удалить в нем все пустые строки. Выдать сообщение, что строки удалены или таковых строк не имеется.

Дан текстовый файл. Удалить из него все пустые строки
Дан текстовый файл. Удалить из него все пустые строки. Дан ряд-предложение русским языком. Вывести самое короткое слово в предолжении....

20
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 20:19
тоже интересует, как можно произвести удаление строк.

по идее, можно конечно через цикл организовать сдвиг всех файлов на -2 (\n), если мы видим пустую строку.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
15.01.2012, 20:22
Переписываете из файла А в файл Б без пустых строк. Файл А удаляете. Файл Б переименовываете.
Второй вариант: использовать fseek. Но он сложнее, поэтому используйте первый.
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.01.2012, 20:22
Цитата Сообщение от SkyFlyStaR Посмотреть сообщение
Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые строки из текстового файла, при условии, что текстовый файл уже существует и в нем встречаются пустые строчки
- кто мешает переписать данные из файла во временный файл, после функцией remove удалить исходный файл данных, а временный переименовать именем исходного функцией rename. Обе функции включены в stdio.h
Крооме того рекомендую посмотреть этот пост и топик в целом
Удаление данных из файла
1
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 20:55
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- кто мешает переписать данные из файла во временный файл, после функцией remove удалить исходный файл данных, а временный переименовать именем исходного функцией rename. Обе функции включены в stdio.h
Крооме того рекомендую посмотреть этот пост и топик в целом
Удаление данных из файла
дополнительный файл использовать нельзя, все делать в исходном файле.
можно открыть как файловый дескриптор (разницы особой нет) и перемещать все символы, что после пустой строки через lseek(file, -2, SEEK_CUR). Загвоздка в том что останется (количество пустых строк)*2 символов в конце файла, а как их удалить...
можно как нибудь EOF "перенести" в другое место?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
15.01.2012, 21:09
Цитата Сообщение от megastriker Посмотреть сообщение
можно как нибудь EOF "перенести" в другое место?
C
1
putc ( EOF , pFile);
Так не подходит?
1
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 21:19
Цитата Сообщение от go Посмотреть сообщение
C
1
putc ( EOF , pFile);
Так не подходит?
так не работает (по крайней мере у меня).
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
15.01.2012, 21:34
megastriker, попытки есть?
0
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 23:33
Цитата Сообщение от OstapBender Посмотреть сообщение
megastriker, попытки есть?
мне бы узнать, как можно затереть последние символы, а реализовать мой алгоритм не проблема.
пробовал сместить конец файла как предлагали, не выходит.

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
 
int
main(void)
{
    FILE *file;
    file = fopen("1.txt", "r+");
    fseek(file, 3, 0);
    putc(EOF, file);
    return 0;
}
не работает, вставляет значок евро в конце файла

Добавлено через 1 час 55 минут
в инете по этому поводу ничего не говорится
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.01.2012, 11:59
Цитата Сообщение от megastriker Посмотреть сообщение
не работает, вставляет значок евро в конце файла
Ну правильно, EOF == -1, переводим в unsigned char - получаем результат
Попробуйте 1A
C
1
putc ( 26 , pFile);
0
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
16.01.2012, 12:34
Цитата Сообщение от go Посмотреть сообщение
Ну правильно, EOF == -1, переводим в unsigned char - получаем результат
Попробуйте 1A
C
1
putc ( 26 , pFile);
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
 
int 
main (int argc, char **argv) 
{
    FILE *file;
    file = fopen("1.txt", "r+");
    fseek(file, 4, SEEK_SET);
    char c = fgetc(file);
    printf("%c\n", c);
    putc (26 , file);
    return 0;
}
4 символ печате, eof не передвигает, файл как был так и остается.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.01.2012, 12:40
Цитата Сообщение от megastriker Посмотреть сообщение
4 символ печате, eof не передвигает, файл как был так и остается.
У меня работает. А Вы как файл смотрите? Визуально они будут (надо с доп. файлом работать), но feof (f) вернет единицу, соответственно дальше читать не будет все любые функции.
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
16.01.2012, 13:28
ребят по-моему вы не в том направлении двигаетесь. EOF это просто признак конца файла, а не реально существующий символ в файле. это как признак того что чтение прошло неуспешно. ИМХО.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.01.2012, 13:29

Не по теме:

Цитата Сообщение от OstapBender Посмотреть сообщение
ребят по-моему вы не в том направлении двигаетесь.
А По-моему Вы топик не весь прочитали. Как делать уже сказано, вносите коррективы https://www.cyberforum.ru/post2392736.html



Цитата Сообщение от OstapBender Посмотреть сообщение
EOF это просто признак конца файла,
Не совсем так.
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
16.01.2012, 14:01
Ну способ занятный не спорю, самое смешное что работает. Тащемто автор сам задал такой вопрос так что оно ему виднее, наверное.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.01.2012, 15:44
Топик меня заинтересовал, поэтому решил и себе попробовать
В файле была введена строка This is the text of program, суть "обрезки" сводилась к усечению половины файла, вот код, скрин и текст файла(кроме putc ещё пробовал fwrite).
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    FILE * f = fopen("test.txt","r+");
    if(!f)
        printf("Error open test.txt\n");
    else
    {
        fseek(f,0,SEEK_END);
        long fLen = ftell(f);
        fseek(f,fLen/2,SEEK_SET);
        printf("OldFile len : %u\n",fLen);
        putc(26,f);
        fseek(f,0,SEEK_END);
        fLen = ftell(f);
        printf("NewFile len : %u\n",fLen);
        //char end = EOF;
        //fwrite(&end,1,sizeof(end),f);
        fclose(f);
    }
    system("pause");
    return 0;
}
До putc This is the text of program
После This is the t xt of program
К моёму сожалению результат на NT платформе оказался ожидаемым мы перезаписали символ в середине файла, кроме этого ftell(f) вернул в обоих случаях одну и туже длинну файла.
Возможно способ пригоден для FAT32 или даже FAT16 я не тестировал и утверждать не берусь, констатирую лишь отработку на XP SP3 NTFS...
Миниатюры
Удалить пустые строки из файла  
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.01.2012, 15:49
Кроме 26 в этой строке
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
putc(26,f);
пробовал
Вариант 2
C
1
2
сhar end = EOF;
putc(end,f);
Вариант 3
C
1
putc(-1,f);
- результат без изменений...
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.01.2012, 15:53
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Кроме 26 в этой строке
Вариант с 26 работает. Визуально в файле будут строки (они не куда не денутся). Попробуйте теперь считывать программой из этого файла. У меня работает, могу код бросить.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.01.2012, 16:08
Цитата Сообщение от go Посмотреть сообщение
Вариант с 26 работает. Визуально в файле будут строки (они не куда не денутся). Попробуйте теперь считывать программой из этого файла. У меня работает, могу код бросить.
- go, если строки
Цитата Сообщение от go Посмотреть сообщение
Визуально в файле будут строки (они не куда не денутся)
это означает что блокнот (ну или какой тестовый редактор использовался) не воспринял наш искуственный EOF, об этом же свидетельствует и мой пример
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
До putc This is the text of program
После This is the t xt of program
Не вопрос я обязательно оттестирую fscanf, fgets ну и ещё что нибудь на предмет остановки на нашем "искуственном конце файла"!(я пока стеснён по времени, через пару часиков смогу)
Как вариант давай уточним наши ОС, у меня окна как ты понял, а что за ОС на твоей машине???

Не по теме:

PS: можно на ты общаться(меня это никак не обижает) мы же как вроди зарыли "топор войны" и даже други теперь, да и не такой я уж старый:D;)

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.01.2012, 20:32
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не вопрос я обязательно оттестирую fscanf, fgets ну и ещё что нибудь на предмет остановки на нашем "искуственном конце файла"
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 <stdio.h>
#include <stdlib.h>
 
int main()
{
    char chr;
    long fLen= -1;
    FILE * f = fopen("test.txt","r+");
    if(!f)
        printf("Error open test.txt\n");
    else
    {
        fseek(f,0,SEEK_END);
        fLen = ftell(f);
        
        fseek(f,0,SEEK_SET);
        printf("OldFile len : %u\n",fLen);
        printf("OldFile entry : %u\n",fLen);
        while(!feof(f))
        {
            if(fscanf(f,"%c",&chr))
                printf("%c",chr);
        }
        printf("\n");
        fseek(f,fLen/2,SEEK_SET);
        chr = EOF;
        putc(/*chr*/26,f);
        fclose(f);
    }
    f = fopen("test.txt","r+");
    if(!f)
        printf("Error open test.txt\n");
    else
    {
        fseek(f,0,SEEK_END);
        fLen = ftell(f);
        fseek(f,0,SEEK_SET);
        printf("NewFile len : %u\n",fLen);
        printf("File entry\n");
        while(!feof(f))
        {
            if(fscanf(f,"%c",&chr))
                printf("%c",chr);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
- признаю програмно можно "заставить" fscanf считать концом файла искуственный EOF

Не по теме:

(чем то мне напомнило нуль-терминаторы в строке от GetLogicalDeviceStrings)

Миниатюры
Удалить пустые строки из файла  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2012, 20:32
Помогаю со студенческими работами здесь

Удалить пустые строки из файла
вот задача: Пусть дан текстовый файл f1. Перепишите его содержимое в файл f2, сохраняя строчную структуру и удаляя пустые строки вот...

Удалить пустые строки из файла
Помогите убрать пустые строки на выходе ! Что-то не получается . using System; using System.Collections.Generic; using...

Удалить из файла пустые строки
Подскажите пожалуйста как в файле пустые строки удалить: 00259C6D1176 Device name: kolvaKust1oper 0000541844DD Device name:...

Удалить из файла все пустые строки
Дан текстовый файл. Удалить из него все пустые строки.

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru