- •Bведение
- •1. Основы языка Basic
- •1.1. Основные структуры
- •1.2. Операторы ввода, вывода, позиционирования
- •1.3. Числа
- •1.4. Строки
- •1.5. Операторы def, dim, пользовательский тип
- •1.6. Разветвление и альтернатива
- •1.7. Циклы
- •If k then print "пароль принят" else print "ошибка пароля"
- •Input "Введите произвольный текст : ", txt
- •Input X
- •1.8. Программные стэки
- •1.9. Массивы
- •If I and jb then
- •Input n
- •1.10. Функции, подпрограммы
- •1.11. Файлы
- •1.12. Сегментирование программы
- •Input n
- •1.13. Работа с графической информацией
- •If nu then gosub Move 'перемещение рисунка
- •1.14. Звуковое воспроизведение
- •2. Элементы vba
- •2.1. Типы переменных
- •2.2. Использование массивов
- •2.3. Разветвление и циклы
- •2.4. Работа с ячейками листа
- •If y X Then
- •If Check Then
- •2.5. Элементы управления
- •If X 0 Then
- •2.6. Пользовательские классы
- •If IsEmpty(Text2) Then Exit Sub
- •2.7. Построение графиков в excel
- •2.8. Построение графиков и таблиц в word
- •3. Ключи в word
- •4. Гипертекстовая разметка
- •4.1. Основные тэги html
- •4.2. Форматирование таблиц
- •4.3. Фреймы
- •5. Основы программирования в среде MathCad
- •5.1. Особенности языка MathCad
- •5.2. Некоторые вычислительные модели
- •5.2.1. Системы уравнений
- •5.2.1.1. Системы линейных уравнений
- •Iter(a, b, e) n Last (b)
- •5.2.1.2. Нелинейные уравнения и системы
- •5.2.2. Определенный интеграл
- •5.2.3. Функции на дискретном множестве
- •5.2.4. Обыкновенные дифференциальные уравнения
- •5.2.5. Минимизация функций
- •5.2.5.1. Функции одной переменной
- •5.2.5.2. Функции многих переменных
- •5.2.6. Pазностная модель и прогноз
- •1 Otherwise (коэффициенты непрерывной модели)
- •5.2.7. Сглаживание и осреднение рядов
- •Задания
- •Литература
1.11. Файлы
Файл - это последовательность записей на внешнем носителе ин-формации. Обычно каждая информационная система организует фай-лы своим специальным образом, присоединяя к имени файла отличи-тельную "типовую" добавку - расширение. Например, файлы в DOS часто имеют расширение .com, .sys, .exe и др., файлы в WORD имеют расширение .doc, . rtf, htm и др., в EXCEL - расширение .xls, в PAINT -.bmp, в MULTIMEDIA .avi, .wav, и т.д. В Бейсике, в основном, созда-ются текстовые и двоичные файлы - без расширения (или с расшире-нием, определяемым пользователем), либо файлы программ с расши-рением .bas .
По типу доступа в Бейсике организуются файлы последователь-ные и файлы прямого доступа.
В последовательных файлах записи могут иметь произволь-ную длину и разделены на носителе специальным признаком конца. Каждое обращение к такому файлу либо добавляет запись к уже суще-ствующим, либо считывает записи по очереди, начиная с первой (как в стэках DATA). При работе с такими файлами используются операторы открытия, работы, закрытия файла.
Открытие файла осуществляется строкой
OPEN" устройство : \ имя" FOR ‹ действие › AS # N,
где действие = , т.е. ввод (считывание из файла), вывод (запись в файл), добавление (к записям в файле), N -номер, присвоен-
ный файлу в программе.
Работа с файлами:
INPUT # N,‹ имя переменной › - считывание записи из файла N,
PRINT # N,‹ имя переменной › - запись в файл с номером N.
Иногда употребляются также операторы WRITE #N (записи разделя-ются запятыми, текстовая информация оформляется в кавычки (это удобно, когда текст содержит знаки препинания) и LINEINPUT # N для чтения информации, записанной оператором WRITE.
Функции LOC и LOF возвращают номер записи и длину файла в байтах. Логическая функция EOF(N) возвращает значение TRUE, если обработана последняя запись файла с номером N, иначе - значение FALSE.
Закрытие файла:
CLOSE # N - закрывает файл с номером N.
Полезно в конце работы закрывать все файлы, чтобы не оставлять ин-формацию в буфере обмена. Оператор END заканчивает программу, закрывая все открытые файлы. Оператор KILL # N уничтожает файл с номером N (освобождает его место в памяти, убирает его имя из ката-лога).
Пример 1. В последовательном файле My_inf требуется оста-вить только числа z, удовлетворяющие условию: z (0, ), < 2. Откроем временный файл с именем Tempo одновременно для записи
и чтения, затем его уничтожим:
DEFSNG Z : CONST pi = 3.1415926
OPEN "C: \ TEMP \ My_inf" FOR INPUT AS #1
OPEN "C: \ TEMP \ Tempo" FOR OUTPUT AS #2
OPEN "C: \ TEMP \ Tempo" FOR INPUT AS #3
DO: INPUT #1, z
IF (z > 0) AND (z < pi) AND ((EXP( - z) + 1) / SIN(z) < 2) THEN PRINT #2,z
LOOP UNTIL EOF(1)
CLOSE #1: OPEN "C: \ TEMP \ My_inf" FOR OUTPUT AS #1
DO: INPUT #3, z: PRINT #1, z : LOOP UNTIL EOF(3)
CLOSE : KILL #2, #3
В файлах прямого доступа хранится только текстовая инфор-мация, при этом каждая запись имеет фиксированную длину, опреде-ляемую полем записи в буфере.
Открытие файла:
OPEN" устройство : \ имя" FOR RANDOM AS # N LEN = M, где N - номер, присвоенный файлу в программе, М - длина записи в
байтах.
Определение поля в буфере обмена (следует после открытия файла):
FIELD # N,‹ поле 1› AS ‹ имя 1›, ‹ поле 2› AS ‹ имя 2›, и т.д.,
где N -номер файла, ‹ поле i › - размер памяти в байтах, отводимой бу-ферной переменной ‹ имя i ›, i = 1,2,..., сумма полей равна М.
Работа:
GET # N, m -считывание записи с номером m из файла с номе-
ром N в буфер.
PUT # N, m - запись содержимого буфера обмена в файл (m -я
запись) с номером N.
Так как здесь обменивается информация только в символьном виде, то числовую информацию следует предварительно переводить в сим-вольную, а при считывании снова переводить в числовую форму. Для этой цели используются, кроме указанных ранее, функции MKI$, CVI (для целых чисел), MKS$, CVS (действительные числа обычной дли-ны), MKD$, CVD (действительные числа двойной длины):
число строка .
Засылка текстовой информации V$ в буферное поле U$ осуществля-ется операторами LSET U$ = V$ и RSET U$ = V$ с выравниванием
по левому и правому краю.
Закрытие - так же, как и для последовательного файла.
Пример 2. Пусть файл "List", расположенный на диске А, содер-жит записи вида: ‹ фамилия, количество детей, домашний адрес, теле-
фон ›, под фамилию отведено 20 байт, под детей 2 байта, под адрес 30
байт, под телефон 8 байт буферной памяти. Требуется вывести на эк-ран фамилии, начинающиеся на букву С, семьи которых имеют не ме-
нее двух детей. Это можно сделать программой:
DEFINT I-N :
OPEN "A:\LIST" FOR RANDOM AS #1 LEN = 60
FIELD #1, 20 AS NAME$, 2 AS CHILD$, 30 AS ADDRESS$ , 8 AS TELEPHONE$
DO : i = i + 1: GET #1 ,i
T$ = LEFT(NAME$ ,1) : n = CVI(CHILD$)
IF (T$ = "C") AND (n =>2) THEN
PRINT NAME$; CHILD$; ADDRESS$; TELEPHONE$
END IF
LOOP UNTIL EOF(1) : CLOSE #1
В приведенном примере можно обойтись без формирования поля
буфера, введя пользовательский тип (см. п. 5):
TYPE Friends
Fam AS STRING * 20
Chil AS INTEGER
Addr AS STRING * 30
Tel AS LONG
END TYPE
DIM Inf AS Friends
OPEN "A:\LIST" FOR RANDOM AS #1 LEN = LEN(Inf)
DO: i = i + 1: GET #1, i, Inf
IF (LEFT$(Inf. Fam, 1) = "C") AND (Inf. Chil >= 2) THEN
PRINT Inf. Fam; Inf. Chil; Inf. Addr; Inf. Tel
END IF
LOOP UNTIL EOF(1): CLOSE #1