русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обработка бинарных файлов


Дата добавления: 2015-07-23; просмотров: 2575; Нарушение авторских прав


Лабораторная работа № 8

Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то произвольный доступ чаще всего применяется к бинарным файлам.

Бинарные файлы могут содержать любую информацию. Чаще всего используются файлы, содержащие структуры. Для чтения и записи в бинарные файлы можно использовать функции fread(), fwrite() или fscanf(),fprintf().

 

fread –функция для чтения из файла:

int fread(void *ptr, unsigned size, unsigned count, FILE *f);

Из файла f считываются и по адресу ptr записываются count элементов размером size каждый. Функция возвращает число фактически считанных элементов.

fwrite – функция для записи в файл:

int fwrite(void *ptr, unsigned size, unsigned count, FILE *f);

В файл записываются, начиная с адреса ptr, count элементов размером size каждый. Функция возвращает число фактически записанных элементов.

fseek – функция для произвольного доступа к байтам бинарных файлов:

int fseek(FILE *f, long offset, int w);

offset показывает, на сколько байт нужно сместиться относительно точки отсчёта – w.

w должно быть равно одной из трех констант:

SEEK_SET или 0 - начало файла;

SEEK_CUR или 1 – текущая позиция в файле;

SEEK_END или 2 – конец файла.

ftell - возвращает текущую позицию в файле как длинное целое:

long int ftell (FILE *f);

 

Пример обработки бинарного файла

 

Составить программу, выполняющую следующие функции:

1. Создание нового файла;

2. Просмотр файла;

3. Добавление информации в конец файла;

4. Поиск по названию товара;



 

Файл создать из структур вида: название товара, его цена и количество.

Задание выполнить в отдельных функциях. Использовать меню для выбора функций.

 

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

 

struct tov {char name[10]; float c; int kol;} t1;

void input(FILE *); // создание нового файла

void print(FILE *); // просмотр файла

void app(FILE *); // добавление в файл

void find(FILE *); // поиск и изменение

main()

{ char c;

FILE *tf;

while (1)

{ system(“CLS”);

puts(" 1 – новый файл");

puts(" 2 – просмотр файла");

puts(" 3 – добавление в файл");

puts(" 4 – поиск ");

puts(" 0 - выход");

c=getch();

switch(c)

{ case '1':input(tf);break;

case '2':print(tf);break;

case '3':app(tf);break;

case '4':find(tf);break;

case '0':return 0;

default : puts(" неверный режим");

}

}

}

void input(FILE *tf)

{ char ch;

tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи

system(“CLS”);

printf("\n Ввод товаров\n");

do

{ printf("\n название: "); scanf("%s",&t1.name);

printf(" цена: "); scanf("%f",&t1.c);

printf(" количество: "); scanf("%d",&t1.kol);

fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1

printf("\n Закончить? y/n ");

ch=getch();

}

while (ch != 'y');

fclose(tf);

}

void print(FILE *tf)

{ int i;

system(“CLS”);

tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения

i=1;

fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1

while (!feof(tf))

{ printf("\n %3d tovar %10s cena %6.2f kolic %4d",i,t1.name,t1.c,t1.kol);

fread(&t1,sizeof(t1),1,tf);

i++;

}

getch();

}

void app(FILE *tf)

{ char ch;

tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления

system(“CLS”);

printf("\n Ввод товаров \n");

do

{ printf("\n название: "); scanf("%s",&t1.name);

printf(" цена: "); scanf("%f",&t1.c);

printf(" количество: "); scanf("%d",&t1.kol);

fwrite(&t1,sizeof(t1),1,tf);

printf(" Закончить? y/n ");

ch=getch();

}

while (ch != 'y');

fclose(tf);

}

void find(FILE *tf)

{ char c,tov[10];

tf=fopen("file1.dat","rb+"); // открытие бинарного файла для чтения и записи

system(“CLS”);

puts(" Название искомого товара: ");

gets(tov);

fread(&t1,sizeof(t1),1,tf);

while (!feof(tf))

{ if (strcmp(t1.name,tov)==0)

{

printf(" tovar %10s cena %6.2f kolic %d",t1.name,t1.c,t1.kol);

getch();

}

fread(&t1,sizeof(t1),1,tf);

}

fclose(tf);

}

 

 

Варианты заданий:

 

На 4-5:

1. Создать бинарный файл. Записать в него числа.

2. Вычислить среднее арифметическое цифр в бинарном файле.

3. Вычислить среднее арифметическое чисел в файле.

4. Выполнить сортировку методом вставок в файле.

 

На 6-7:

 

1. В двоичном файле указан размер квадратной матрицы, а затем построчно записаны элементы матрицы целых чисел. Таких групп данных в файле несколько. Вычислить сумму элементов, расположенных ниже главной диагонали. Результат записать в коней файла. Имя файла задается в командной строке.

2. Удалить из бинарного файла чисел, содержащиеся в текстовом файле. Имена файлов получить из командной строки. В файлах содержится числовая информация.

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

4. Из текстового файла удалить числа, содержащиеся в бинарном файле.

5.Выполнить сортировку бинарного файла методом вставок. Дополнительных массивов и файлов не использовать.

6. Для бинарного файла выполнить сортировку длинных целых чисел методом «через отбор». Дополнительных массивов и файлов не использовать.

7. В бинарном файле выполнить реверсивный переворот содержащихся в нем целых чисел. Дополнительных массивов и файлов не использовать.

8. Вбинарномчисловомфайлевыполнитьперестановкуместами 1 и 2, 3 и 4 ит.д. элементов. Дополнительных массивов и файлов не использовать.

9. Изкоманднойстрокиполучитьимябинарногофайлаиграницыдиапазона чисел, которыенужноудалитьизфайла. Дополнительныхмассивовифайловне использовать.

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

 

На 8-9:

1.Используя функции и режим меню, создать бинарный файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, при­меняя режим прямого доступа, выполнить задание по своему варианту.

2. Запись имеет вид: фамилия, пол, год рождения и рост. Вывести данные о самом высоком спортсмене.

3. Запись имеет вид: название вуза, число студентов, количес­тво факультетов. Добавить в конец файла информацию о трех новых вузах и посчитать общее число студентов.

4. Запись имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести на печать информацию о самом дешевом издании.

5. Запись имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее.

6. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах. *

7. Запись имеет вид: фамилия, номер телефона, дата рождения. Внести в начало списка информацию о четырех новых знакомых.

8. Запись имеет вид: название инструмента, число, месяц и год изготовления. Вывести на печать информацию об инструменте с самым большим сроком использования и выполнить корректировку этой записи.

9. Запись имеет вид: номер читательского билета, автор книги, название, дата заказа. Вывести на экран содержимое файла. Поменять местами первую и последнюю записи в файле.*

10. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков.

11. Запись имеет вид: фамилия, количество вещей, общий вес. Удалите из файла сведения о багаже, общий вес вещей в котором меньше, чем 10 кг.

12. Запись имеет вид: название команды, количество набранных очков, фамилии капитанов. Вывести на печать список в порядке набранных мест.

13. Запись имеет вид: марка видеомагнитофона, стоимость, количество. Напечатать информацию об имеющихся в продаже магнитофонах. При покупке их количество соответственно уменьшается. Предусмотреть удаление информации о видеомагнитофонах, количество которых равно нулю.

 



<== предыдущая лекция | следующая лекция ==>
 | Решение простейших тригонометрических уравнений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.069 сек.