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

Чтение из файла в C, редактирование его и запись в новый файл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 251, средняя оценка - 4.74
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
27.03.2010, 22:11     Чтение из файла в C, редактирование его и запись в новый файл #1
В общем, задача такая: Программе на вход подается исходный текст какой-нибудь программы на С..
Нужно удалить из него все комментарии. Впервые мне дали задание, где нужно применять работу с файлами, подскажите, пожалуйста - как открыть файл? И как с ним работать? обычный текст.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2010, 22:11     Чтение из файла в C, редактирование его и запись в новый файл
Посмотрите здесь:

C++ запись массива в файл и его чтение
Чтение из файла, запись в файл C++
запись в файл и чтение из файла C++
Запись в файл, чтение из файла C++
Чтение из файла/Запись в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
maxik42
 Аватар для maxik42
4 / 19 / 3
Регистрация: 22.03.2010
Сообщений: 131
27.03.2010, 22:36     Чтение из файла в C, редактирование его и запись в новый файл #2
Цитата Сообщение от farewell Посмотреть сообщение
В общем, задача такая: Программе на вход подается исходный текст какой-нибудь программы на С..
Нужно удалить из него все комментарии. Впервые мне дали задание, где нужно применять работу с файлами, подскажите, пожалуйста - как открыть файл? И как с ним работать? обычный текст.
Обьявить f: FILE *f;
f - указатель на файл.
Открываем файл f=fopen("название файла","символ");
символы там разные но основные это "r" и "w".
fprintf(); - запись в файл.
fscanf(); - считывание из файла.
fputs(); - запись строки.
fgets(); - считывание строки.
Закрытие fclose(f);
если что в хелпе можно покопатся по етим функциям!
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
27.03.2010, 22:43  [ТС]     Чтение из файла в C, редактирование его и запись в новый файл #3
Спасибо!)
Но вот когда я открыл файл.. как мне, например, удалить из него все буквы "А"?

C
1
2
3
f: FILE *f;
f = fopen("text.txt","r");
//... а дальше? Текст из открытого файла где хранится? в массиве каком, что ли?) вот тут непонятно, как редактировать открытый текст :)
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
27.03.2010, 23:09     Чтение из файла в C, редактирование его и запись в новый файл #4
farewell, наверно так
C
1
2
3
while((c=getc(f)!=EOF){
if(c=='a')c=" ";
}
зы не проверял
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
28.03.2010, 00:19  [ТС]     Чтение из файла в C, редактирование его и запись в новый файл #5
не пашет..
Фатальная ошибка, всем хана.
maxik42
 Аватар для maxik42
4 / 19 / 3
Регистрация: 22.03.2010
Сообщений: 131
28.03.2010, 01:05     Чтение из файла в C, редактирование его и запись в новый файл #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от farewell Посмотреть сообщение
Спасибо!)
Но вот когда я открыл файл.. как мне, например, удалить из него все буквы "А"?

C
1
2
3
f: FILE *f;
f = fopen("text.txt","r");
//... а дальше? Текст из открытого файла где хранится? в массиве каком, что ли?) вот тут непонятно, как редактировать открытый текст :)
Очень просто! нужно просканировать первый файл и создать новый и уже в него записать без букв А!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
main()
{
  FILE *in,*out;
  char c;
 
  in=fopen("data","r");//Тут еще нужно бы было проверять возвращаемое значение при открытии файлов
  out=fopen("data2","w");
 
  while ( (c=fgetc(in) ) != EOF)//считываем символ из файла data в переменную c до символа EOF.
    {
       if ( c != 'A' )              //игнорируем все символы А.
            fputc( c,out );//записываем переменную в файл data2.
    }
 
  fclose(out);//проверить код закрытия или удачно закрыты файлы!
  fclose(in);
 
}
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
28.03.2010, 23:14  [ТС]     Чтение из файла в C, редактирование его и запись в новый файл #7
Выдает ошибку дебагера, даже не в окне ошибок, а вылезает отдельное виндовое олдскульное окошко: типа
Expression: (stream != NULL)
maxik42
 Аватар для maxik42
4 / 19 / 3
Регистрация: 22.03.2010
Сообщений: 131
29.03.2010, 00:36     Чтение из файла в C, редактирование его и запись в новый файл #8
Цитата Сообщение от farewell Посмотреть сообщение
Выдает ошибку дебагера, даже не в окне ошибок, а вылезает отдельное виндовое олдскульное окошко: типа
Expression: (stream != NULL)
А у вас какой компилятор?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.03.2010, 05:28     Чтение из файла в C, редактирование его и запись в новый файл #9
Цитата Сообщение от farewell
В общем, задача такая: Программе на вход подается исходный текст какой-нибудь программы на С..
Нужно удалить из него все комментарии.
там работы с файлами нет
Код
cat file.c | ./prog > output.c
для виндовс
Код
type file.c | prog.exe > output.c
для начала, конечно, лучше сделать на файлах

Добавлено через 2 минуты
когда файлов нет, там обычный поток ввода и поток вывода
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
29.03.2010, 10:44  [ТС]     Чтение из файла в C, редактирование его и запись в новый файл #10
Ура, всё получилось! Спасибо огромное!
Уже делаю задание, столкнулся с такой проблемой:
Как удалить комментарий типа /* ..... */ ?
Сумел написать проверку на "/*":

C
1
2
3
4
5
6
7
8
9
10
11
12
  FILE *in,*out;
  char c;
 
  in=fopen("data.txt","r");
  out=fopen("data2.txt","wb");
 
  while ( (c=fgetc(in) ) != EOF)
        {
           if ( c != '/' )
           {     fputc( c,out );}
           else { if((c=fgetc(in))='*') {printf("Вот и комментарий!");}}
        }
Но этот кусок кода, как только наткнется на /*, сразу удаляет всё до конца файла. Что делать?)
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.03.2010, 04:49     Чтение из файла в C, редактирование его и запись в новый файл #11
а если слеш не является частью комментария
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27
30.03.2010, 20:05  [ТС]     Чтение из файла в C, редактирование его и запись в новый файл #12
Уже исправил) Тут теперь новая проблема.. Вот код, удаляющий однострочные комменты:
C
1
2
3
4
5
6
7
8
9
10
11
12
 while ( (c=fgetc(in) ) != EOF) // пока файл не кончится
        {
            if(c=='/') { 
                if(c=getc(in)=='/') { //если следуют две косые палки подряд
                printf("Found a start of comment.\n");
                while((c=fgetc(in)!='\n')) {} //Пропускаем текст коммента..
                printf("Comment ended. I will continue..\n"); }//камент кончился
                else {fputc(c,out);}
            }
            else {fputc(c,out);}
 
        }
Так эта сволочь, удалив однострочный коммент, удаляет и символ /n, то есть если было так:
C
1
2
int i; //asasas
int j;
То после работы программы получается вот что:
C
1
int i;int j;
Что делать? Почему-то fputc('\n',out) не помогает.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.03.2010, 03:31     Чтение из файла в C, редактирование его и запись в новый файл #13
с однострочными то же самое
C
1
int a = b / 2;
съедает /

Цитата Сообщение от farewell
Почему-то fputc('\n',out) не помогает.
делай отступы, чтобы сразу видеть, что к чему относится, а что к чему не относится

C
1
2
3
4
5
6
7
8
9
10
11
12
    while ((c = fgetc(in)) != EOF) { // пока файл не кончится
        if (c == '/') { 
            if ((c = getc(in)) == '/') { //если следуют две косые палки подряд
                printf("Found a start of comment.\n");
                while ((c = fgetc(in)) != '\n')
                    ; //Пропускаем текст коммента..
                printf("Comment ended. I will continue..\n"); //камент кончился
            } else
                fputc(c,out);
        } else
            fputc(c,out);
    }
там несколько ошибок было со скобками
вот теперь видно, где нет вывода '\n'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2010, 01:15     Чтение из файла в C, редактирование его и запись в новый файл
Еще ссылки по теме:

C++ Чтение из файла и запись в файл
Чтение из файла и запись в файл C++
C++ Чтение массива из файла, его преобразование и запись в другой файл

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

Или воспользуйтесь поиском по форуму:
Tarasishche
Сообщений: n/a
25.04.2010, 01:15     Чтение из файла в C, редактирование его и запись в новый файл #14
А можно код целиком....особенно интересует часть с удалением коментов типа /*-----*/
Ато та же праблема)
Yandex
Объявления
25.04.2010, 01:15     Чтение из файла в C, редактирование его и запись в новый файл
Ответ Создать тему
Опции темы

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