Организация работы с файлами — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Организация работы с файлами

2017-05-23 442
Организация работы с файлами 0.00 из 5.00 0 оценок
Заказать работу

Язык Си, кроме стандартного ввода данных с клавиатуры и вывода результатов на экран, предоставляет также возможность обмена данными с файлами, находящимися на диске. В Си не предусмотрены никакие предопределенные структуры файлов (такие как файлы последовательного или прямого доступа); все файлы рассматриваются как последовательные, потоки битов.

Для файла определен маркер (указатель чтения/ записи). Он определяет текущую позицию, к которой осуществляется доступ. С началом работы любой программы автоматически открываются некоторые стандартные потоки, например, стандартный ввод (его имя – stdin) и стандартный вывод (его имя – stdout). По умолчанию они связаны с клавиатурой и экраном соответственно. Поэтому в тех функциях ввода/вывода, которые использовались до сих пор, не указывалось, из какого потока берутся или куда помещаются данные: это известно по умолчанию.

Однако, в своей программе возможно открыть и другие потоки, связывать их либо с файлами на диске, либо с физическими устройствами (например, с принтером), записывать в них или считывать из них информацию. Для этого служат функции ввода/вывода верхнего уровня. Доступ к потоку осуществляется с помощью указателя. Указатель на файл описывается следующим образом:

 

FILE *fp;

Тип FILE – это структура, определенная в < stdio > с помощью средства typedef и содержащая некоторую информацию о файле: например, флаги состояния файла, размер буфера, указатель на буфер и др. Описанный указатель можно связать с конкретным файлом в момент открытия данного файла. Это осуществляется с помощью функции

fopen(“путь к файлу”,”тип доступа”),

которая возвращает указатель на файл или NULL в случае ошибки.

Например, в результате выполнения оператора

fp=fopen(“ex1.txt”,”w”);

файл ex1.txt будет открыт для записи, а в программе на этот файл можно сослаться с помощью указателя fp ( т.е. функция fopen() берет внешнее представление файла - его физическое имя - и ставит ему в соответствие внутреннее логическое имя, которое далее будет использоваться в программе). В качестве типа доступа могут быть указаны следующие параметры:

w ” –существующий файл открывается для записи, если файл не существовал, он создается заново, если существовал, то старое содержимое стирается.

r ” – файл открывается для чтения с начала.

a ” - файл открывается для дозаписи в конец файла.

(О других типах доступа можно прочитать в пособии по языку Си.[1].)

По окончании работы с файлом он должен быть закрыт. Для этого используется функция

fclose(указатель_файла).

Для чтения /записи данных в файл имеются функции, аналогичные уже известным функциям ввода/вывода

fprintf(),fscanf()? fputs(), fgets(), getc() putc(),getc(), ffputc().

Функции getc()/ fgetc(), putc()/fputc() по своим действиям идентичны, отличие состоит только в том, что getc() и putc() реализованы как макроопределения, а fgetc() и fputc(). - как настоящие функции.

Прототипы всех файловых функций, а также необходимые константы находятся в файле < stdio.h >.

Чтобы продемонстрировать работу с этими функциями, рассмотрим простой пример.

Пример 1.

# include<stdio.h>

void main()

{

int n;

char *str, str1[50],ch;

FILE *fp;

// Заполняем файл

fp=fopen(“D:\ex.txt”,”w+a”);

puts(“Введите целое число”);

scanf(“%d”,&n);

fprintf(fp, “%d\n”, n);

puts(“Введите символ”);

ch= getch ();

putc (ch,fp);

puts(“Введите строку\n”);

scanf(“%s”, str);

fputs (str, fp);

fclose (fp);

// Читаем из файла

printf(“распечатка содержимого файла”);

if((fp= fopen (“D:\ex.txt”,”r”))!= NULL)

{

fscanf (fp, “%d”,&n);

printf(“n= %d\n”, n);

ch=getc (fp); putchar (ch);

fgets (str1, 50, fp); puts(str1);

fclose (fp);

}

else printf (“\n Нельзя открыть файл для чтения!”);

}

Второй параметр функции fgets() – количество N считываемых символов, включая ‘\0’. Эта функция прекращает работу после чтения N-1 символа, либо после чтения ‘\0’. Функция fgets() возвращает либо адрес прочитанной строки, либо NULL по исчерпании файла или в случае ошибки.

В случае исчерпания файла или ошибки функция getc() возвращает EOF (End of FILE) – конец файла.

Функция fputs () возвращает код последнего прочитанного символа, если все в порядке, и EOF в случае ошибки. Эта функция не переводит строку автоматически.

Все приведенные выше функции обрабатывали файл последовательно символ за символом. Язык Си предоставляет возможность работать с файлом как с массивом: непосредственно достигать любого определенного байта. Для позиционирования файла служит функция.

fseek(указатель на файл, смещение от начальной точки, начальная точка).

Второй аргумент имеет тип long. Его значение может быть больше и меньше нуля. Он показывает, как далеко (в байтах) следует продвинуться от начальной точки. Третий аргумент является кодом, определяющим положение начальной точки в файле. Установлены следующие значения кода: 0- начало файла, 1- текущая позиция, 2- конец файла. В случае успеха функция fseek() возвращает 0, а если была ошибка, то возвращается –1.

Так как язык Си связан с операционной системой UNIX, то в системе Borland C++ создана вторая система ввода/вывода. Эта система соответствует стандарту UNIX. Прототипы функций находятся в файле IO.H. Этими функциями являются

read() – читает буфер данных;

write()- пишет в буфер данных;

open()- открывает файл;

close()- закрывает файл;

lseek()- поиск определенного байта в файле;

unlink() - уничтожает файл.

Пример 2. Написать функцию, которая читает любое число байтов из любого меcта файла.

int get (int fd, long pos, char *buf, int n);

{

if (lseek(fd, pos, 0)>=0) return read (fd, duf, n);

else return –1;

}

 

Задание на выполнение работы

1. Создайте текстовый файл в директории группы.

2. Введите программу примера 1. Выполните действия с заполнением и считыванием символов и строк.

3. Составить программу обработки текстового файла в соответствии с вариантом задания, представленного в таблице 7.1.

 

Таблица 7.1

Номер варианта Вид обработки
  1.1 В текстовом файле подсчитать количество строк, которые оканчиваются заданной буквой (задается преподавателем). 1.2 Подсчитать количество слов в тексте 1.3 Посчитать количество символов нижнего регистра  
  2.1 В текстовом файле подсчитать количество строк, которые начинаются заданной буквой (задается преподавателем). 2.2 Посчитать количество строк в заданном тексте. 2.3 Подсчитать количество пробелов в тексте.
  3.1 Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину. 3.2 Подсчитать количество печатных символов, отличных от пробела 3.3 Подсчитать количество пустых строк в файле.
  4.1 Найти минимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину. 4.2 Подсчитать количество строк, начинающихся с определенной буквы латинского алфавита. 4.3 Подсчитать количество символов в строке с минимальной длиной.
  5.1 Подсчитать количество строк, начинающихся с букв верхнего регистра. 5.2 Подсчитать количество печатных символов, отличных от пробела 5.3 Подсчитать количество пустых строк в файле.
  6.1 Найти длину строки, лежащей в заданном пределе. 6.2.Соединить две строки в одну. 6.3.Подсчитать количество печатных символов, отличных от цифр
  7.1 Найти строку, начинающуюся с заданной буквы. 7.2 Сравнить две строки 7.3 Подсчитать количество слов в заданной строке.
  8.1 Найти строку, оканчивающуюся на заданную букву. 8.2. Подсчитать количество слов в заданной строке. 8.3 К первой строке присоединить n символов другой строки.
  9.1 Подсчитать количество строк, начинающихся с букв нижнего регистра. 9.2. Найти самую длинную строку в тексте. 9.3. Подсчитать количество слов в тексте.
  10.1 Найти минимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину. 10.2 Найти две идентичные строки 10.3 Подсчитать количество символов, отличных от перевода строки.
  11.1 Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину 11.1 Подсчитать количество пробелов в тексте 11.3 Подсчитать количество слов в тексте    
Продолжение табл.7.1
  12.1 В текстовом файле подсчитать количество строк, которые начинаются заданной буквой (задается преподавателем). 12.2 Посчитать количество строк в заданном тексте. 12.3 Подсчитать количество пробелов в тексте.
  13.1 В текстовом файле подсчитать количество строк, которые имеющих одинаковую длину. 13.2 Посчитать количество слов в заданном тексте. 13.3 Подсчитать количество строчных букв в тексте.
  14.1 Найти строку, оканчивающуюся на заданную букву. 14.2. Подсчитать количество слов в заданной строке. 14.3 К первой строке присоединить n символов другой строки.
  15.1 Найти строку, начинающуюся с заданной буквы. 15.2 Найти строку идентичной заданной 15.3 Подсчитать количество слов в тексте.

 

 

Содержание отчета

 

1. Краткие теоретические сведения о методах обработки потоков данных.

2. Программа обработки, распечатки файлов с данными.

3. Комментарии к программе и полученным результатам

 

Контрольные вопросы

1. Что такое поток данных?

2. В чем состоит различие ввода данных в стандартном потоке и с внешнего устройства?

3. Напишите команды открытия файла для чтения и записи, закрытия файла.

4. В чем состоит различие команд fputs() и fgets()?

 

Работа №8

Обработка списков

Цель работы: освоение методов обработки линейных и дважды связанных списков, приобретение навыков составления и отладки соответствующих программ

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.021 с.