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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
SkyFlyStaR
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
15.01.2012, 19:57     Удалить пустые строки из файла #1
Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые строки из текстового файла, при условии, что текстовый файл уже существует и в нем встречаются пустые строчки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 20:19     Удалить пустые строки из файла #2
тоже интересует, как можно произвести удаление строк.

по идее, можно конечно через цикл организовать сдвиг всех файлов на -2 (\n), если мы видим пустую строку.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.01.2012, 20:22     Удалить пустые строки из файла #3
Переписываете из файла А в файл Б без пустых строк. Файл А удаляете. Файл Б переименовываете.
Второй вариант: использовать fseek. Но он сложнее, поэтому используйте первый.
-=ЮрА=-
Заблокирован
Автор FAQ
15.01.2012, 20:22     Удалить пустые строки из файла #4
Цитата Сообщение от SkyFlyStaR Посмотреть сообщение
Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые строки из текстового файла, при условии, что текстовый файл уже существует и в нем встречаются пустые строчки
- кто мешает переписать данные из файла во временный файл, после функцией remove удалить исходный файл данных, а временный переименовать именем исходного функцией rename. Обе функции включены в stdio.h
Крооме того рекомендую посмотреть этот пост и топик в целом
Удаление данных из файла
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 20:55     Удалить пустые строки из файла #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- кто мешает переписать данные из файла во временный файл, после функцией remove удалить исходный файл данных, а временный переименовать именем исходного функцией rename. Обе функции включены в stdio.h
Крооме того рекомендую посмотреть этот пост и топик в целом
Удаление данных из файла
дополнительный файл использовать нельзя, все делать в исходном файле.
можно открыть как файловый дескриптор (разницы особой нет) и перемещать все символы, что после пустой строки через lseek(file, -2, SEEK_CUR). Загвоздка в том что останется (количество пустых строк)*2 символов в конце файла, а как их удалить...
можно как нибудь EOF "перенести" в другое место?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.01.2012, 21:09     Удалить пустые строки из файла #6
Цитата Сообщение от megastriker Посмотреть сообщение
можно как нибудь EOF "перенести" в другое место?
C
1
putc ( EOF , pFile);
Так не подходит?
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 21:19     Удалить пустые строки из файла #7
Цитата Сообщение от go Посмотреть сообщение
C
1
putc ( EOF , pFile);
Так не подходит?
так не работает (по крайней мере у меня).
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
15.01.2012, 21:34     Удалить пустые строки из файла #8
megastriker, попытки есть?
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
15.01.2012, 23:33     Удалить пустые строки из файла #9
Цитата Сообщение от 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 минут
в инете по этому поводу ничего не говорится
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2012, 11:59     Удалить пустые строки из файла #10
Цитата Сообщение от megastriker Посмотреть сообщение
не работает, вставляет значок евро в конце файла
Ну правильно, EOF == -1, переводим в unsigned char - получаем результат
Попробуйте 1A
C
1
putc ( 26 , pFile);
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
16.01.2012, 12:34     Удалить пустые строки из файла #11
Цитата Сообщение от 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 не передвигает, файл как был так и остается.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2012, 12:40     Удалить пустые строки из файла #12
Цитата Сообщение от megastriker Посмотреть сообщение
4 символ печате, eof не передвигает, файл как был так и остается.
У меня работает. А Вы как файл смотрите? Визуально они будут (надо с доп. файлом работать), но feof (f) вернет единицу, соответственно дальше читать не будет все любые функции.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.01.2012, 13:28     Удалить пустые строки из файла #13
ребят по-моему вы не в том направлении двигаетесь. EOF это просто признак конца файла, а не реально существующий символ в файле. это как признак того что чтение прошло неуспешно. ИМХО.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2012, 13:29     Удалить пустые строки из файла #14

Не по теме:

Цитата Сообщение от OstapBender Посмотреть сообщение
ребят по-моему вы не в том направлении двигаетесь.
А По-моему Вы топик не весь прочитали. Как делать уже сказано, вносите коррективы Удалить пустые строки из файла



Цитата Сообщение от OstapBender Посмотреть сообщение
EOF это просто признак конца файла,
Не совсем так.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.01.2012, 14:01     Удалить пустые строки из файла #15
Ну способ занятный не спорю, самое смешное что работает. Тащемто автор сам задал такой вопрос так что оно ему виднее, наверное.
-=ЮрА=-
Заблокирован
Автор FAQ
16.01.2012, 15:44     Удалить пустые строки из файла #16
Топик меня заинтересовал, поэтому решил и себе попробовать
В файле была введена строка 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...
Миниатюры
Удалить пустые строки из файла  
-=ЮрА=-
Заблокирован
Автор FAQ
16.01.2012, 15:49     Удалить пустые строки из файла #17
Кроме 26 в этой строке
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
putc(26,f);
пробовал
Вариант 2
C
1
2
сhar end = EOF;
putc(end,f);
Вариант 3
C
1
putc(-1,f);
- результат без изменений...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.01.2012, 15:53     Удалить пустые строки из файла #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Кроме 26 в этой строке
Вариант с 26 работает. Визуально в файле будут строки (они не куда не денутся). Попробуйте теперь считывать программой из этого файла. У меня работает, могу код бросить.
-=ЮрА=-
Заблокирован
Автор FAQ
16.01.2012, 16:08     Удалить пустые строки из файла #19
Цитата Сообщение от go Посмотреть сообщение
Вариант с 26 работает. Визуально в файле будут строки (они не куда не денутся). Попробуйте теперь считывать программой из этого файла. У меня работает, могу код бросить.
- go, если строки
Цитата Сообщение от go Посмотреть сообщение
Визуально в файле будут строки (они не куда не денутся)
это означает что блокнот (ну или какой тестовый редактор использовался) не воспринял наш искуственный EOF, об этом же свидетельствует и мой пример
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
До putc This is the text of program
После This is the t xt of program
Не вопрос я обязательно оттестирую fscanf, fgets ну и ещё что нибудь на предмет остановки на нашем "искуственном конце файла"!(я пока стеснён по времени, через пару часиков смогу)
Как вариант давай уточним наши ОС, у меня окна как ты понял, а что за ОС на твоей машине???

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 20:32     Удалить пустые строки из файла
Еще ссылки по теме:

C++ Переписать текст исходного файла во второй файл, сохраняя строчную структуру и удаляя пустые строки
C++ Переписать текст исходного файла во второй файл, сохраняя строчную структуру и удаляя пустые строки

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
16.01.2012, 20:32     Удалить пустые строки из файла #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не вопрос я обязательно оттестирую 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)

Миниатюры
Удалить пустые строки из файла  
Yandex
Объявления
16.01.2012, 20:32     Удалить пустые строки из файла
Ответ Создать тему
Опции темы

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