- •Программирование и основы алгоритмизации Методические указания к лабораторным работам
- •Введение
- •Порядок выполнения лабораторных работ
- •Оформление отчетов к лабораторным работам
- •Лабораторная работа 1
- •Директивы препроцессора
- •Комментарии
- •Простые типы
- •Операции над простыми типами
- •Функции
- •Ввод-вывод в стиле с
- •Массивы
- •Варианты индивидуальных заданий
- •Лабораторная работа №2 Указатели. Связь массивов и указателей
- •Понятие указателя
- •Связь между массивами и указателями
- •Динамическое формирование массивов
- •Варианты индивидуальных заданий
- •Лабораторная работа №3 Обработка строк текста
- •Примеры программ
- •Варианты индивидуальных заданий
- •Лабораторная работа №4 Работа с файлами
- •Примеры программ
- •Варианты индивидуальных заданий
- •Заключение
- •Библиографический список
Лабораторная работа №4 Работа с файлами
Цели работы:
познакомиться с возможностями по обработке текстовых файлов;
освоить основы работы с двоичными файлами.
Краткие сведения о работе с файлами с использованием библиотеки stdio
Для работы с внешним файлом на диске в программе требуется объявить файловую переменную: FILE файловый указатель, например: FILE *f;
Открытие файла выполняет функция fopen(), которая возвращает переменную типа FILE. Вся дальнейшая работа с файлом выполняется с использованием файлового указателя.
FILE *fopen(const char *fname, const char *mode);
Первый параметр – имя файла
Второй параметр – режим открытия файла:
“r” – открывает текстовый файл для чтения
“w” – открывает текстовый файл для записи
и др.
Если файл открыть не удалось, возвращается пустой указатель – NULL. Пример:
FILE *f; //файловый указатель
f = fopen(“c:\\autoexec.bat”,”r”); //открыть файл для чтения
if (f==NULL) //если не открылся, выводим сообщение об ошибке
{
printf(“Error\n”);
};
Закрытие файла выполняется функцией fclose. Пример: fclose(f);
Функция feof() позволяет узнать, достигнут ли конец файла. Пример:
while(!feof(f))
{
//читаем из файла
}
Чтобы прочитать из файла один символ, используется функция fgetc:
int fgetc(FILE *stream);
Пример:
char c = fgetc(f);
Чтобы прочиать из файла строку символов, используется функция fgets:
char *fgets(char *str, int num, FILE *stream);
Функция читает из файла строку символов и помещает её в переменную str. Символы читаются до тех пор, пока не будет достигнут символ новой строки или конец файла или не будет прочитано (num-1) символов. В переменной str за последним прочитанным символом помещается нулевой символ.
Пример:
char str[256];
fgets(str,256,f);
printf(“str=%s\n”,str);
Функция fprintf выполняет форматированный вывод в файл. Аналогична функции printf:
int fprintf(FILE *stream, const char *format, …);
Пример:
char s[]=”строка”;
int len = strlen(s); //длина строки s
fprintf(f,”длина строки ‘%s’ = %d”,s,len);
Примеры программ
1. Пример обработки текстового файла – копирование строк из одного файла в другой
#include <stdio.h>
#include <conio.h>
main()
{FILE *fin,*fout;
if (fin=fopen("binfile.cpp","r"))
{ char s[100];fout=fopen("b1.cpp","w");
while (fgets(s,100,fin)) {puts(s);fputs(s,fout);}
} else puts("error");
fclose(fout);
getch();return 0;
}
2. То же самое, но демонстрируются функции fprintf, fscanf
#include <stdio.h>
#include <conio.h>
main()
{FILE *fin,*fout;
if (fin=fopen("binfile.cpp","r"))
{ char s[100];fout=fopen("b1.cpp","w");
while (fscanf(fin,"%s",s)!=EOF) {printf("%s\n",s);fprintf(fout,"%s\n",s);}
} else puts("error");
fclose(fout);
getch();return 0;
}
3. Пример обработки двоичного файла – заполнение его значениями 0 1 2 … 9 и вывод их в обратном порядке
#include <stdio.h>
#include <conio.h>
main()
{FILE *f; f=fopen("a.dat","w+b"); int i;
for (i=0;i<10;i++) fwrite(&i,sizeof(int),1,f);
fseek(f,0,0); int x;
for (i=9;i>0;i--) {fseek(f,i*sizeof(int),0);fread(&x,sizeof(int),1,f); printf("%d ",x);}
getch();
}