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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
SkyFlyStaR
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 69
#1

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

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

Надо именно удалить (а не пропустить или не перенести текст в новый файл без пустых строк) пустые строки из текстового файла, при условии, что текстовый файл уже существует и в нем встречаются пустые строчки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2012, 19:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить пустые строки из файла (C++):

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

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

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

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

Удалить из i-ой строки файла i первых символов - C++
Дан текстовый файл f, содержащий 20 строк. Нужно удалить из i-ой строки i первых символов. Вот что написал: #include <fstream>; ...

Удалить из файла последние три строки. - C++
lIUDI POMAGITE POJALUIUSTA REWIT ETU ZADACHU!!!! В теме должна быть только одна задача! Text21º. Дан текстовый файл, содержащий более...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор 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++
3586 / 1366 / 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: можно на ты общаться(меня это никак не обижает) мы же как вроди зарыли "топор войны" и даже други теперь, да и не такой я уж старый

-=ЮрА=-
Заблокирован
Автор 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)

Миниатюры
Удалить пустые строки из файла  
megastriker
49 / 49 / 18
Регистрация: 05.12.2010
Сообщений: 261
17.01.2012, 00:51 #21
Спасибо, я от темы отчаливаю, сегодня не пригодилось)
а вообще - тема интересная...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2012, 00:51
Привет! Вот еще темы с ответами:

Удалить из каждой строки файла первые K символов - C++
Всем привет! Вообщем есть задачка Дано целое число K и текстовый файл. Удалить из каждой строки файла первые K символов (если длина...

Удалить строки из одного файла и записать их в другой - C++
имеется текстовый файл F1.txt. В нем, скажем 10 строк, разделенный знаком каретки(снос строки). пример: 0а 1б 2в 3г 4д ...

Для каждой строки файла удалить короткое слово - C++
Для каждой строки файла удалить короткое слово. Результат записать в файл. FILE *f1,*f2; f1=fopen(&quot;F1.txt&quot;,&quot;rt&quot;); ...

Определить пустые строки - C++
В условии прописано: Пустые строки не печатать. Пустыми строками считать строки, в которых либо нет символов, либо они содержат только...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.01.2012, 00:51
Ответ Создать тему
Опции темы

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