Лекции. Основные понятия и определения
Скачать 1.94 Mb.
|
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. Средства языка Basic13.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, ,"Результат") Если заголовок отсутствует, то вместо него выводится название приложения. Так как сообщение представляет собой текстовую строку, то при необходимости вывода нескольких значений (возможно числовых) следует применять оператор сцепления строк &. |