Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа N 7.
ИССЛЕДОВАНИЕ ОСОБЕННОСТЕЙ ПРИМЕНЕНИЯ ФАЙЛОВЫХ ОПЕРАЦИЙ В Си.
Цель работы изучить особенности программирования типовых задач с использованием файловых операций в языке Си
Краткие теоретические сведения Файл это поименованная область памяти на внешнем носителе, предназначенная для хранения информации. Файл может быть связан с любым источником или потребителем информации. Файл может быть входным или выходным. Из входного файла программа получает данные, в выходной выводит их. Каждый файл имеет имя, которое зарегистрировано в заглавии носителя информации. С помощью команд операционной системы можно осуществлять те или иные действия над файлами.
Существует два способа доступа к компонентам файла: последовательный и произвольный (параллельный). При последовательном способе доступа поиск начинается с начала файла и проверяется по очереди каждый компонент, пока не будет найден нужный. Произвольный способ доступа позволяет обращаться к компоненту по его порядковому номеру в файле. Допускается большая гибкость при работе с файлами. В частности, компоненты последовательного организованного файла могут обрабатываться произвольно, а компоненты произвольного файла последовательно. Однако с самого начала на основе анализа структуры данных следует выбрать, какой способ доступа к компонентам необходим, что в конечном итоге и определит эффективность программы.
Файлы последовательного доступа используются для решения задач, требующих поочередной обработки компонент файла при отсутствии жестких ограничений на время решения. Работа с последовательными файлами предполагает создание файла, его обработку и корректировку.
Для создания последовательного файла необходимо выполнить следующие шаги:
Пример. Создать файл с посимвольным вводом данных, который продолжается до тех пор, пока не нажата клавиша Enter
#include <stdio.h>
main()
{
FILE *fp;
Char letter;
If ((fp = fopen(“MYFILE.TXT”, “w”)) = = NULL)
{
puts(“Невозможно открыть файл”);
exit();
}
do
{letter = getc();
fputc(letter, fp);
}
while(letter != \r);
fclose(fp);
}
Чтобы обработать хранящиеся в файле данные, необходимо получить доступ к компонентам файла. Для этого надо:
Пример. Программа читает файл созданный в предыдущем примере:
#include <stdio.h>
main()
{ FILE *fp;
Char letter;
If ((fp = fopen(“MYFILE.TXT”, “w”)) = = NULL)
{
puts(“Невозможно открыть файл”);
exit();
}
while ((letter = fgetc(fp)) != EOF)
//операторы выполняющие обработку
printf(“%c”, letter);
fclose(fp);
}
Функции, работающие с символами, предназначены только для чтения и записи текста. Если требуется записать или прочитать из файла, либо отпечатать на принтере данные, содержащие числовые значения, то необходимо использовать функции fprintf() и fscanf(). Для записи инструкций с этими функциями используется тот же синтаксис, что и для функций printf() и scanf(), но в этом случае требуется еще включить указатель на файл, чтобы определить, куда следует записать или откуда читать данные:
fprintf(FILE *Stream, control_string, data_list);
fscanf(FILE *Stream, control_string, data_list);
Для чтения структурированной информации из файла используется функция fread(). Синтаксис данной функции следующий:
unsigned fread( void Buf, int Size int Count FILE *Stream)
Выполнение функции fread() приводит к вводу из файла, идентифицируемого аргументом Stream, порции информации, местоположение Buf и размер Count которой в оперативной памяти указан посредством Size. Результатом работы функции является величина со значениями, равным количеству вводимых объектов информации. Если данное количество меньше чем Count, то это означает наличие ошибки выполнения функции или ввод данных из файла, находящегося в конечной позиции.
Пример. Ниже приведены две программы, причем первая из них осуществляет ввод и запись в файл данных инвентарной описи, а вторая считывает их.
Пример 1
#include <stdio.h>
main()
{
FILE *fp;
Char name[20];
Int quantity;
Float cost;
If ((fp = fopen(“MYFILE.TXT”, “w”)) = = NULL)
{
puts(“Невозможно открыть файл”);
exit();
}
printf(“Введите наименование товара : ”);
gets(name);
fputc(letter, fp);
while (strlen(name) > 0)
{
printf(“Введите цену товара: ”);
scanf(“%f, &cost”);
printf(“Введите количество единиц товара: ”);
scanf(“%d, &quantity”);
fprintf(fp, “%s %f %d \n”, name, cost, quantity);
printf(“Введите наименование товара: ”);
gets(name);
}
fclose(fp);
}
Пример 2
#include <stdio.h>
main()
{
FILE *fp;
Char name[20];
Int quantity;
Float cost;
If ((fp = fopen(“MYFILE.TXT”, “w”)) = = NULL)
{
puts(“Невозможно открыть файл”);
exit();
}
while (fscanf( fp, “%s %f %d”, name, &cost, &quantity) != EOF)
{
printf(“Наименование товара: %s \n”, name);
printf(“Цена товара: %2f \n”, cost);
printf(“Количество единиц товара: %d \n”, quantity);
}
fclose(fp);
}
Возможны три вида корректировки последовательного файла: расширение файла за счет внесения новых компонентов, полная замена содержимого записи и корректировка значений полей отдельных записей. Все три вида одинаково применимы и к последовательным, и к произвольным файлам.
Если файл, который уже существует на диске, открыть с режимом доступа “w”, вся информация, имевшаяся на нем в настоящий момент, будет уничтожена. Для того чтобы добавить данные в уже существующий на диске файл, следует открывать его с режимом доступа “a”. Если режим ”a” используется для файла, которого нет на диске, он будет создан, а если файл существует, в него будет добавлена новая информация.
При расширении файла новые компоненты записываются сразу за его последним компонентом. Расширение файла предполагает выполнения следующих шагов:
Файлы произвольного доступа создаются для решения задач, требующих оперативного доступа к хранимой информации или при наличии зависимости значений поля компонента от порядкового номера компонента в файле.
Работа с файлом произвольного доступа предполагает его организацию, обработку и корректировку.
Организовать файл произвольного доступа можно двумя способами: 1) создать последовательный файл и обращаться к его компонентам по их порядковому номеру, трактуя последовательный файл как произвольный; 2) создать файл фиктивных записей, затем загрузить его по ключу фактическими данными.
Певый способ аналогичен созданию последовательного файла, а форматизация заключается во внесении в файл компонентов, значение полей которых носит фиктивный характер (например, нули или пробелы)
Задание на работу Выполнить демонстрационные программы и сделать выводы письменно.