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

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

15.01.2012, 19:57. Показов 10590. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru