Главная страница

Лекции. Основные понятия и определения


Скачать 1.94 Mb.
НазваниеОсновные понятия и определения
Дата27.03.2018
Размер1.94 Mb.
Формат файлаdocx
Имя файлаЛекции.docx
ТипКонтрольные вопросы
#39570
страница38 из 58
1   ...   34   35   36   37   38   39   40   41   ...   58

13.4. Средства языка С


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

13.4.1. Открытие и закрытие файла


Прототип: FILE *fopen(char *a, char *b); - открытие файла.

Параметры:

- a – имя файла (полный путь);

- b – способ обработки:

- r – только чтение;

- w – только запись;

- a – только добавление в конец существующего файла.

Параметры способа обработки r и w могут дополняться символом +, который означает также и возможность изменения содержания файла.

Пример. w+ - создать файл и затем изменять.

Возвращаемое значение: указатель на файл (при нормальном открытии) | NULL (при ошибке).

Пример.

FILE *p; // Указатель на файл. Должен быть описан в программе

..................................

p=fopen("u:\c_lections\examples\out.dat", "r");

Прототип: int fclose(FILE *); - закрытие файла.

Возвращаемое значение: 0 - нормальное закрытие | EOF - ошибка.

13.4.2. Основные функции обмена


Правила обращения к ним практически совпадают с ранее описанными для функций стандартных потоков ввода-вывода stdin и stdout. Появляется лишь дополнительный параметр – указатель на файл: FILE *.

Прототипы:

int fscanf(FILE *file, <управляющая строка>,<список данных>); См.scanf.

int fprintf(FILE *file, <управляющая строка>,[<список данных>]); См.printf.

int getc(FILE *file); - чтение одного символа. См.getchar.

int putc(int symb,FILE *file); - запись одного символа. См.putchar.

char* fgets(char *string, int max_len,FILE *file); Читает max_len-1 символ из файла или до символа '\n' (если раньше встретится). Добавляет в конец прочитанной строки символ '\0' вместо символа '\n'. См.gets.

int fputs(char *string,FILE *file); См.puts.

Замечание. Символ '\0' в файл не записывается и символ '\n' не добавляется. Если в этом есть необходимость, следует добавлять символ '\n' самостоятельно.

13.5. Средства языка Basic

13.5.1. Открытие и закрытие файла

Инструкция FileOpen


Открывает файл.

Формат:

Public Sub FileOpen(ByVal FileNumber AsInteger, _ - дескриптор файла,

ByVal FileName As String, _ - полный путь к файлу,

ByVal Mode As OpenMode) - режим открытия.

Здесь:

- дескриптор – идентификатор файла в программе – целое значение в диапазоне [1 - 511];

- полный путь – строка в кавычках либо выражение, результатом вычисления которого является строка, указывающая путь к файлу;

- режим – значение из перечислимого типа OpenMode:

- input – чтение;

- output – запись с начала (старая информация стирается);

- append – запись (добавление) в конец файла.

Инструкция FileOpen должна предшествовать всем инструкциям, непосредственно работающим с содержанием файла. Если файл, открываемый в режиме output или append не существует в момент открытия, то он создается в папке, заданной путем.

Пример.

FileOpen(5,"u:\c_lections\examples\out.txt", OpenMode.output)

FileOpen(6,"u:\c_lections\examples\enter.txt”,OpenMode.input)

При переносе задачи на другой компьютер с другой файловой структурой (другая вложенность и имена папок) удобно использовать не полный путь к открываемому файлу, а путь относительно папки, в которой создается exe файл приложения. В нашем случае, если открываемые файлы находятся в папке examples, то инструкции открытия примут вид:

FileOpen(5,"..\..\out.txt", OpenMode.output)

FileOpen(6,"..\..\enter.txt”,OpenMode.input)

Символы ..\ ..\ означает подъем на 2 уровня выше по структуре вложенности папок, т.к. exe файл создается в папке examples\bin\debug.

Инструкция FileClose


Закрывает 1 или более файлов.

Формат:

Public Sub FileClose(ParamArray FileNumbers() As Integer)

Массив параметров FileNumbers() содержит дескрипторы закрываемых файлов.

Инструкция FileClose без списка дескрипторов закрывает все открытые файлы.

Пример.

FileClose(5,6)

13.5.2. Работа с файлами

Инструкция Input


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

Формат:

Public Sub Input(FileNumber As Integer, _ - дескриптор файла,

ByRef Value As Object) - переменная, которой назначается читаемое из файла значение.

Это не может быть массив или переменная типа object.

Пример.

Input(6, x) : Input(6, y)

For i=1 To 10

Input(6, arr(i))

Next

Инструкция LineInput


Читает из файла текстовую строку целиком и присваивает ее значение переменной типа string. Строка ограничена символом перевод строки.

Формат:

Public Function LineInput(ByVal FileNumber As Integer) As String

Пример.

text=LineInput(6)

Инструкции Write и WriteLine


Записывает значения элементов списка данных в одну текстовую строку. Элементы в файле разделяются запятыми, строки заключаются в кавычки, после записи последнего элемента списка данных функцией WriteLine заносится символ перевод строки. В качестве десятичного разделителя для числовых данных используется . (точка).

Формат:

Public Sub Write(ByVal FileNumber As Integer, _

ByValParamArray Output() As Object)

Public Sub WriteLine(ByVal FileNumber As Integer, _

ByVal ParamArray Output() As Object)

Здесь FileNumber – дескриптор файла,

Output() – список выводимых данных, разделенный запятыми. 

Пример.

WriteLine(5, x+2, i+1)

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

Инструкции Print и PrintLine


Также записывает значения элементов списка данных в файл. Основное отличие этих инструкций от инструкций Write и WriteLine заключается в разделении выводимых данных пробелами.

Формат:

Public Sub Print(ByVal FileNumber As Integer, _

ByVal ParamArray Output() As Object)

Public Sub PrintLine(ByVal FileNumber As Integer, _

ByValParamArray Output() As Object)

Элементы списка данных выравниваются на установленную позицию табуляции.

Список данных может содержать функции Tab([n]) и Spc(n).

Функция Tab([n]) располагает очередной элемент, начиная с n-й позиции от начала строки. Если n < текущей позиции в файле, то элемент располагается с n-й позиции следующей строки. Функция Tab без аргумента вставляет значение с начала очередной позиции табуляции.

Функция Spc(n) вставляет между очередными выводимыми значениями n пробелов.

Пример.

Print(5, "Координаты точки:", x, Spc(5), y)

Дополнительные функции


Полезными могут оказаться следующие функции:

FileLen(<путь>) – длина неоткрытого файла в байтах,

LOF(<дескриптор>) – длина открытого файла в байтах,

EOF(<дескриптор>) – возвращает true при достижении конца файла.

Функция MsgBox


Эта функция не относится к функциям работы с файлами, но, поскольку необходимо, чтобы программа на языке Basic выдавала на экран информацию о ходе выполнения, она приводится в данном разделе. Функция MsgBox выдает на экран сообщение в диалоговом окне, ожидает нажатие пользователя на одну из кнопок окна и возвращает значение типа integer, равное № нажатой кнопки. Поскольку здесь эта функция нужна лишь для индикации хода выполнения программы, приводится упрощенное обращение к функции MsgBox, которое формирует окно сообщения с одной кнопкой "ОК".

Формат:

MsgBox(<сообщение>, , <заголовок>)

Пример.

MsgBox("Длина последовательности:" & kol, ,"Результат")

Если заголовок отсутствует, то вместо него выводится название приложения. Так как сообщение представляет собой текстовую строку, то при необходимости вывода нескольких значений (возможно числовых) следует применять оператор сцепления строк &.
1   ...   34   35   36   37   38   39   40   41   ...   58


написать администратору сайта