ЦЕЛЬ РАБОТЫ: Изучить возможность сохранения результатов работы программы в файлах на дисках и считывания информации из файла.
1.Порядок выполнения работы
1.1. В любом текстовом редакторе создать небольшой текстовый файл.
1.2. Выполнить программу 1 для вашего файла.
1.3. Выполнить индивидуальное задание.
Текст программы
/* Программа 1.*/ Kопированиe файла:
#include <stdio.h>
int main(void)
{
FILE *in, *out;
char *file1,*file2;
puts(“Copy file “);
gets(file1);
puts(“ to “);
gets(file2);
if ((in = fopen(file1, “rt”)) == NULL) //файл
//открывается для чтения в текстовом режиме
{
fprintf(stderr, “Cannot open input file.\n”); return 1;
}
if ((out = fopen(file2, “wt”)) == NULL) //файл
//открывается для записи в текстовом режиме
{
fprintf(stderr,”Cannot open output file.\n”); return 1;
}
while (!feof(in)) // посимвольное копирование файла fputc(fgetc(in), out);
fclose(in); //закрытие файла
fclose(out);
return 0;
}
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.
1. Дан текстовый файл, содержащий вещественные числа. Определить сумму всех компонент файла и записать ее в конце файла.
2. Дан текстовый файл, содержащий вещественные числа. Определить наибольший и наименьший компонент. Результат записать в новый файл.
3. Дан текстовый файл, содержащий целые числа. Определить коли-чество четных компонент и записать в конец файла.
4. Дан текстовый файл. Создать его копию.
5. Даны два текстовых файла. Слить их в один.
6. Дан текстовый файл. Заменить в нем все прописные буквы на строчные.
7. Дан текстовый файл, содержащий вещественные числа. Определить сумму квадратов компонент и записать ее в конец файла.
8. Дан текстовый файл. Создать новый файл, в котором информация записана в обратном порядке.
9. Дан символьный файл, содержащий информацию в виде : фамилия_и-мя_отчество. Записать эту информацию в другой символьный файл в виде: имя_отчество_фамилия.
10. Дан символьный файл, содержащий информацию в виде : фами-лия_имя_отчество. Записать эту информацию в другой символьный файл в виде: фамилия_и.о.
11. Зашифровать текст, записанный с помощью русских букв и зна-ков препинания по следующему алгоритму: буква а шифруется как буква я, ‘б’ как ‘ю’ и т.д. Полученный текст сохранить в файле на диске.
12. Дан текстовый файл. Подсчитать число вхождений в файл букв а, б, с, д и т.д. и вывести на экран в виде таблицы: а — кол-во б — кол-во и т.д.
13. Дан текстовый файл. Произвести его сжатие за счет удаления лишних пробелов и переводов строки. Полученный текст сохранить в новом файле.
14. Дан файл, содержащий вещественные числа в строке. Создать новый файл и записать в него эти числа в колонку.
2. Содержание отчета.
1. Текст программы индивидуального задания.
3.Вопросы по защите лабораторной работы
1. Как работать со структурой FILE ?
2. Какие существуют стандартные потоки ввода/вывода?
3. Как открыть файл?
4. Как закрыть файл?
5. Ввод/вывод символа (функции).
6. Ввод/вывод строк (функции).
7. Форматированный ввод/вывод (функции).
8. Ввод/вывод записей фиксированной длины (функции).
9. Указатель файла-позиционирование, получение текущего поло-жения (функции).
10. Описать программу 1.
ПРИЛОЖЕНИЕ.
Все ниже изложенные функции, cтруктуры и потоки определены в включаемом файле stdio.h.
1. Структура FILE* — структура управления потоком файлов.
Хранит информацию, связанную с устройством или файлом.
typedef struct {
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer, *curp;
unsigned istemp;
short token;
} FILE;
Стандартные потоки
stdin Стандартный поток ввода
stdout Стандартный поток вывода
stderr Стандартный поток сообщений об ошибках
stdprn Стандартный поток вывода на принтер
2. функции работы с файлами
2.1.FILE *fopen(const char *filename, const char *mode);
Возвращает указатель на структуру FILE, если файл открыт успешно
иначе NULL.
mode: Type ¦ Meaning
======+==================================
r ¦ Открыть для чтения (файл должен существовать)
w ¦ Открыть пустой файл для записи (если файл существует, то его
¦ содержимое теряется)
a ¦ Открыть для записи в конец файла (добавления); файл создает-
¦ ся, если он не существует
r+ ¦ Открыть для чтения и записи (файл должен существовать)
w+ ¦ Открыть пустой файл для чтения и записи; если файл существу-
¦ ет, его содержимое теряется
а+ ¦ Открыть для чтения и добавления; файл создается, если он не
¦ существует
b ¦ в двоичной форме
t ¦ в текстовом режиме
2.2. Закрытие файла: если файл не нужен то его необходимо закрыть
int fclose(FILE *stream); возвращает 0 если успешно; иначе EOF.
После открытия файла доступ к данным, содержащимся в нем воз-
можен как к потоку символов, строкам, форматированным полям, за-
писям.
2.3. Ввод.вывод символа:
вывод символа в поток ввод символа из потока
int fputc(int c, FILE *stream); int fgetc(FILE *stream);
Чтение производится пока не конец файла.
Функция int feof(FILE *stream) возвращает 0 если не конец файла
2.4. Ввод /вывод строк
ввод из потока строки символов
char *fgets(char *s, int n, FILE *stream);
char *s — адрес, куда поместить введенные символы
int n — размер буфера
вывод в поток строки символов
int fputs(const char *s, FILE *stream);
2.5. Форматированный ввод/вывод:
int fprintf(FILE *stream, const char *format[, argument, …]);
то же, что и printf, но в поток. Если FILE *stream == stdout то
полная аналогия с printf.
int fscanf(FILE *stream, const char *format[, address, …]);
то же что и scanf, но из потока. Если FILE *stream == stdin то
полная аналогия с scanf.
2.6. Ввод/вывод записей фиксированной длины — применяется, если
данные будут использоваться только вашими программами.
вывод:
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
ввод:
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
void *ptr -указатель на буфер
size_t size -размер элемента
size_t n -число элементов
FILE *stream -указатель на структуру FILE
Пример: fread(a.b,sizeof(a.b),1,in);
2.7. Позиционирование указателя файла:
int fseek(FILE *stream, long offset, int whence);
long offset — число байтов смещения
whence: SEEK_SET == 0 c начала файла
SEEK_CUR == 1 с текущей позиции
SEEK_END == 2 от конца файла
2.8. Получение текущего положения указателя файла:
long ftell(FILE *stream);
Другие функции ввода/вывода описаны в файлах stdio.h и io.h.