Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


обработка данных с помощью функций ввода/вывода

Файлы

 

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

Файлы могут быть текстовые и двоичные. Примером двоичных файлов является EXE-файл, содержащий готовую к выполнению программу.

Последовательность действий при работе с файлом:

- объявление переменной-указателя на файл с помощью типа FILE *f

Открытие файла с помощью команды fopen(“имя_файла”, тип), где тип – rt, wt, at, rb

обработка данных с помощью функций ввода/вывода

- закрытие файла с помощью команды fclose(указатель на файл)

 

При открытии для каждого файла создается структура, содержащая информацию о файле (имя файла, вид обработки, адрес буфера ввода/вывода и др.) Шаблон такой структуры описан в библиотечном файле stdio.h. Краткое название этого шаблона –FILE. В программе необходимо для каждого файла описать указатель на структуру типа FILE и присвоить значения этим указателям с помощью функции - fopen().

 

Функция fopen() открывает для использования поток, связывает файл с данным потоком и затем возвращает указатель FILE на данный поток. Чаще всего файл рас­сматривается как дисковый файл. Функция fopen() имеет следующий прототип:

FILE *fopen(const char *имя_файла, const char *режим);

Таблица: Допустимые значения режимов
Режим Значение
"r" Открывает файл для чтения. (Открывает по умолчанию как текстовый файл.)
"w" Создает файл для записи. (Открывает по умолчанию как текстовый файл.)
"а" Присоединяет к файлу. (Открывает по умолчанию как текстовый файл.)
"rb" Открывает двоичный файл для чтения.
"wb" Открывает двоичный файл для записи.
"ab" Присоединяет к двоичному файлу.
"r+" Открывает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)
"w+" Создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)
"a+" Присоединяет или создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)
"r+b" Открывает двоичный файл для чтения/записи.
"w+b" Создает двоичный файл для чтения/записи.
"a+b" Присоединяет или создает двоичный файл для чтения/записи.
"rt" Открывает текстовый файл для чтения.
"wt" Создает текстовый файл для записи.
"at" Присоединяет к текстовому файлу.
"r+t" Открывает текстовый файл для чтения.
"w+t" Создает текстовый файл для чтения/записи.
"a+t" Открывает или создает текстовый файл для чтения/записи.

 


Для чтения информации из файла используются функции:

Название функции Описание
int putc(int ch, FILE *fp); Функция putc() используется для записи символов в поток, ранее открытый для записи с помо­щью функции fopen().fp — это указатель на файл, возвращенный fopen(), a ch - выводимый символ. Указатель на файл указывает putc(), в какой файл следует писать. По историческим причинам ch определена как int, но используется только младший бит. Если putc() выполнена успешно, она возвращает выведенный символ. В противном случае воз­вращает EOF.
int getc(FILE *fp); используется для чтения символов из потока, открытого на чтение с помощью fopen().fp - это указатель на файл типа FILE *, возвращенный fopen(). По традиции getc() возвращает целое, но старший байт установлен в 0.
int fprintf(FILE *fp, const char *форматная_строка,...); ведет себя так же, как и printf()за тем исключением, что работает с дисковыми файлами
int fscanf(FILE *fp, const char * форматная_строка,...); ведет себя так же, как и scanf(), за тем исключением, что работает с дисковыми файлами
size_t fread(void *буфер, size_t число_байту size_t объем, FILE *fp); функция, позволяющие читать блоки данных. буфер - это указатель на область памяти, которая получает данные из файла. возвращает число прочитанных элементов.
size_t fwrite(const void *буфер, size_t число_байт, size_t объем, FILE *fp); функция, позволяющие писать блоки данных. буфер - это указатель на информацию, записываемую в файл. Длина каждого элемента в байтах определяется в число_байт
int fseek(FILE *fp long нисло_байт, int начало); Можно выполнять операции произвольного чтения и записи, используя систему буферизированного ввода/вывода, с помощью fseek(), устанавливающей текущую файловую позицию где fp - это указатель на файл, возвращенный fopen(), число_байт - это длинное целое, содер­жащее число байт от начала до позиции маркера, а начало - это одно из следующих макроопре­делений (определенных в stdio.h):
Макроопределение Смысл
SEEK_SET SEEK_CUR SEEK_END Начало файла Текущая позиция Конец файла

 

 


Пример работы fread, fwrite:

Одно из наиболее полезных применений fread() и fwrite() - это чтение и запись блоков данных типа массивов или структур. Например, следующий фрагмент записывает содержимое массива вещественных чисел balance в файл balance, используя один оператор fwrite(). Далее она читает массив, используя один оператор fread(), и выводит его содержимое.

#include <stdio.h>
int main(void)
{
register int i;
FILE *fp;
float balance[100];

/* открытие на запись */
if((fp=fopen("balance", "wb"))==NULL) {
printf("Cannot open file.");
return 1;
}
for(i=0; i<100; i++) balance[i] = (float) i;

/* сохранение за раз всего массива balance */
fwrite(balance, sizeof balance, 1, fp);
fclose(fp);
/* обнуление массива */
for(i=0; i<100; i++) balance[i] = 0.0;
/* открытие для чтения */
if((fp=fopen("balance","rb"))==NULL) {
printf("cannot open file");
return 1;
}

/* чтение за раз всего массива balance */
fread(balance, sizeof balance, 1, fp);

/* вывод содержимого массива */
for(i=0; i<100; i++) printf("%f ", balance [i]);
fclose(fp);
return 0;
}

 


Задачи

1. Написать программу, которая считывает аглийский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы, на прописную

2. Написать программу, которая считывает текст и заменяет все точки сокращением «тчк», а запятые – сокращением «зпт»

3. Написать программу, которая считывает текст и удаляет все лишние пробелы, оставив между словами только один пробел, а между предложениями – 2 пробела

4. Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова «ноль», «один», …, начиная каждое предложение с новой строки

 



<== предыдущая лекция | следующая лекция ==>
Центральное и параллельное проектирования. Их свойства | Баобаб Лайф: полезные элементы для беременных
Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 389 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

4328 - | 4080 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.