Базовые типы целочисленных данных.

Базовые типы целочисленных данных.

Целочисленные типы - обозначают множества целых чисел в различных диапазонах. Имеется пять целочисленных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти.

Название типа Длина области памяти в байтах Диапазон значений
Byte 0 – 255
Boolean (логический) True или False
Short (короткий целый) От -32 768 до 32 767
Integer (целый) От -2 147 483 648 до 2 147 483 647
Long (длинный целый) От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

Базовые типы числовых данных с дробной частью.

Название типа Длина области памяти в байтах Диапазон значений
Single (числа с дробной частью одинарной точности) Отрицательные числа от -3,402823*10^38до-1,401298*10^-45 и положительные от 1,401298*10^-45 до 3,402823*10^38 Точность 6 – 7 десятичных разрядов.
Double (числа с дробной частью двойной точности) Отрицательные числа от -1,79769313486232*10^308до -4,9406564841247*10^-324 и положительные от 4,9406564841247*10^-324 до 1,79769313486232*10^308 Точность 14 – 15 десятичных разрядов.
Decimal (целые числа и числа с дробной частью) Масштабируемый показателем степени 10^P , где Pизменяется в пределах от 0 до 28. Число имеет P разрядов дробной части. Максимальное значение равно 79 228 162 514 264 337 593 543 950 335, минимальное значение равно -79 228 162 514 264 337 593 543 950 335.

Объявление констант и переменных.

a) Для определения константы и ее значения используется оператор Const. Объявляя константу, пользователь присваивает значению имеющее смысл имя. После объявления константы ее нельзя изменить или присвоить ей новое значение.

Константа объявляется в процедуре либо в разделе объявлений модуля, класса или структуры. Константы класса или уровня структуры являются Private по умолчанию, но могут также объявляться как Public, FriendProtected или Protected Friend для соответствующего уровня доступа к коду.

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

b)Переменная должна быть объявлена до первого обращения к ней. По умолчанию не

допускается в программном коде применять имена не объявленных переменных. Это

ограничение может быть отменено инструкцией Option Explicit Off.

Однако пользоваться этим не рекомендуется, так как разрешение применения в программе

необъявленных имен может привести к трудно обнаруживаемым ошибкам.

Синтаксис инструкции объявления переменной:

Static/Public/Private/Dim ИмяПеременной As Тип [= Значение]

Здесь слова Static, Public, Private, Dim и As являются зарезервированными.

В подобных определениях синтаксиса прямоугольные скобки […] означают, что

конструкция, находящаяся внутри этих скобок, не обязательна. Символ / означает, что должно быть выбрано одно из слов, между которыми он поставлен. Сами же символы [, ],

/ в текст объявления не включаются.

Действие инструкции объявления переменной состоит в том, что под переменную

отводится ячейка памяти, в которую записывается значение, если оно указано после

указания типа.

Арифметические операции.

Операция Функция
[операнд1] + [операнд2] Сложение
[операнд1] - [операнд2] Вычитание
- операнд Перемена знака
[операнд1] * [операнд2] Умножение
[операнд1] / [операнд2] Деление
[операнд1] \ [операнд2] Целочисленное деление. Результат – целая часть отношения операндов без остатка
[операнд1] MOD [операнд2] Деление по модулю. Деление выполняется до получения целой части. Остаток возвращается как результат.
[операнд1] ^ [операнд2] Возведение в степень

умножение (*), когда один или оба операнды являются строкой символов, но при условии, что их значения, можно интерпретировать как числа:

Dim i, r As Integer, str As String

i = 5

str = “25”

r = i * str ‘String -> Integer

При этом особую осторожность следует соблюдать с операцией (+), которая в

зависимости от контекста может означать либо операцию сложения, либо операцию

сцепления.

В операции операнд1 + операнд2 символ (+) VB будет воспринимать как:

- операцию сложения, если оба операнда имеют кокой либо из числовых типов;

- операцию сложения, если один операнд имеет числовой тип, а второй является

строкой символов, значение которой может быть интерпретировано как число;

- операцию сцепления, если один операнд имеет числовой тип, а второй является

строкой символов, значение которой не может быть интерпретировано как число;

- операцию сцепления, если оба операнда имеют строковый тип независимо от их

значений.

Пример.

Dim i As Integer

Dim r As Single

Dim st1 As String

i = 2

r = -1.3

St1 = r + i ‘Результат: “0.7”

‘Integer -> Single, Single -> String

Пример.

Dim st1, st2 As String

st1 = 25 ‘Результат: “25”

st2 = 15 ‘Результат: “15”

st2= st1 + st2 ‘Результат: “2515” К оглавлению

Произошло сцепление операндов,поскольку оба операнда

имеют строковый тип. Если один операнд будет иметь строковый, а другой – числовой, например, целый тип.

Введем следующий программный код:

Dim st1, st2 As String

st1 = 2

st2 = 3

st1 = 25 + st1 + st2 ‘Результат: “30”

‘String -> Integer, String -> Integer

7) Отношения, логический тип данных, логические операции.(неполный)

Операции отношения:

[операнд1] < [операнд2] Меньше Результат True, если отношение выполняется, или False, если отношение не выполняется
[операнд1] > [операнд2] Больше
[операнд1] <= [операнд2] Меньше или равно
[операнд1] => [операнд2] Больше или равно
[операнд1] = [операнд2] Равно
[операнд1] <> [операнд2] Не равно

В VB.NET определены логические операции: And (логическое умножение), Or

(логическое сложение), Not (логическое отрицание), а также Xor (логическое

исключительное сложение).

Операция Not имеет следующий синтаксис:

Not Операнд

Операнд, имеющий логический тип, – это отношение, переменная или функция

логического типа или результат логической операции. Результат логического отрицания

имеет значение противоположное значению ее операнда, что показывает приведенная

ниже таблица:

Значение операнда Значение операции Not Операнд
True False
False True

Операция And имеет два операнда: Операнд 1 And Операнд 2

Результат операции And определяет таблица:

Значение операнда 1 Значение операнда 2 Значение операции Операнд 1 And Операнд 2
True True True
True False False
False True False
False False False

!Операция And имеет значение True только тогда, когда оба операнда имеют значение

True.

Пример. Неравенство a ≤ x ≤ b следует записать:

a <= x And x <= b

Операция Or также имеет два операнда: Операнд 1 Or Операнд 2

Результат операции Or даны в таблице:

Значение операнда 1 Значение операнда 2 Значение операции Операнд 1 OR Операнд 2
True True False
True False True
False True True
False False False

! Операция Or имеет значение True, если хотя бы один операнд (и даже оба вместе) имеют

значение True.

Пример. Условие х не принадлежит отрезку [a, b] следует записать

x < a Or x > b или Not(a <= x And x <= b).

Xor (логическое исключительное сложение)

Результат операции Xor дан в таблице:

Значение операнда 1 Значение операнда 2 Значение операции Операнд 1 XOR Операнд 2
True True False
True False True
False True True
False False False

! Операция Xor имеет значение True, если хотя бы один операнд (но не оба вместе) имеют

значение True.

В VB.NET определены также логические операции: AndAlso и OrElse. Операция

AndAlso очень похожа на операцию And. Она также выполняет логическое умножение

для двух логических операндов (Boolean). Основным различием между AndAlso и And

является то, что AndAlso допускает сокращенное, неполное вычисление операндов. Если

для первого операнда в AndAlso вычисляется значение False, второй операнд не

вычисляется и возвращается значение False операции AndAlso. Аналогично операция

OrElse очень похожа на операцию Or. Она выполняет сокращенное логическое

сложение двух логических операндов. Если первый операнд в выражении OrElse равен

True, второй операнд не вычисляется и возвращается True для операции OrElse.

8)Приоритет операций.(неполный)

Таблица приоритетов:

Приоритет Операция Приоритет Операция
Вызов функции, скобки. \
^ MOD
- +,-
*,/    

Инструкция выбора If.

Наиболее часто для программирования разветвлений используется

инструкция If ... End If

Эта инструкция может иметь однострочный или блочный синтаксис.

Однострочный синтаксис.

If Условие Then Инструкция1 [Else Инструкция2]

Здесь If (если), Then (то) и Else (иначе) - зарезервированные слова. Функционирование

этой инструкции относительно просто. Если записанное после If условие истинно, т.е.

результат равен True, то выполняется Инструкция 1, указанная за Then. Если же

результат равен False, то выполняется Инструкция 2, следующая за ключевым словом

Else, если такая имеется. Например:

If a = 7 Then Beep

If x < 9 Then MsgBox("False!") Else MsgBox("True!")

Первая строка задает подачу звукового сигнала, если переменная a равна 7. Во второй

строке в окне функции MsgBox выводится текст False!, если значение переменной x

меньше 9. В противном случае выводится текст True!.

Существенно, что после слова Then, а также после слова Else может находиться

несколько операторов, отделенных друг от друга двоеточием. В этом случае такая

последовательность операторов является одной группой, которая либо выполняется, либо

пропускается в зависимости от управляющего условия.

Пример:

Dim a As Boolean = False, b As Integer

If a Then b = b + 1 : b = b + 1 : b = b + 1

Console.WriteLine(b)

В этом примере переменная b получит значение 0. Если бы переменная a была равна

True, то переменная b получила бы значение 3.

Блочный синтаксис.

If Условие Then

[Инструкции 1]

[ElseIf УсловиеN Then

[Инструкции N]

Else

[Инструкции 2]]

End If

Если в зависимости от условия необходимо выполнить не простую команду, а группу

инструкций, следует использовать блочный синтаксис. Это относится и к ветви Else.

Кроме того, блочная структура с ElseIf позволяет анализировать несколько условий:

If A = 7 Then

Beep

End If

If Name = "Иванов" Then

MsgBox("Ваша карточка удерживается!")

Else

MsgBox("Получите деньги, пожалуйста!")

End If

If Обращение = 1 Then

MsgBox("Здравствуйте, господин")

ElseIf Обращение = 2 Then

MsgBox(" Здравствуйте, госпожа")

Elself Обращение = 3 Then

MsgBox(" Здравствуйте, дамы и господа")

Else

MsgBox("Здравствуйте, люди")

End If

Массивы.

Массив - это группа переменных, содержащих элементы данных одного типа и с

одним именем. Под каждый элемент массива отводится отдельная ячейка. Все элементы

массива имеют один и тот же тип. Возможны ссылки на отдельные элементы массива.

Каждый отдельный элемент массива определяется именем массива и значениями

индексов. Например, ссылки a(7) или a1(2, 9) означают, что:

а – это имя одномерного массива (вектора) с одним индексом, элемент массива имеет

значение индекса равное 7;

а1- это имя двумерного массива (матрицы). Об этом говорит применение двух индексов

для определения элемента массива.

Первый индекс трактуется как номер строки, в которой находится элемент массива, а второй индекс, как номер столбца.

Индексом может быть выражение целого типа с неотрицательным значением.

Нижняя граница индекса всегда равна 0.

Верхняя граница каждого индекса массива

задается при его объявлении.

Как и простые переменные, массивы объявляются с помощью инструкций Dim,

Static, Private или Public.

Примеры объявления массивов:

Dim x() As Single

Dim y(,) As Single

Здесь объявлен одномерный массив с именем x и двумерный массив y. Об этом

говорят скобки в объявлении после имени каждого массива. При объявлении двумерного

массива между скобок должна стоять запятая. Объявление верхних границ индексов в

этих примерах отложено на потом (такие массивы называют динамическими).

Для объявления верхней границы индекса и размещения в памяти массивов следует

поместить инструкцию:

Redim x(10), y(4,5)

Здесь заданы значения верхних границ каждого индекса массивов. Индекс массива

x может принимать значение в диапазоне от 0 до 10. Массив x имеет 11 элементов.

Первый индекс массива y может принимать значение в диапазоне от 0 до 4. Второй

индекс массива y может принимать значение в диапазоне от 0 до 5. Массив y имеет 30

элементов (произведение числа строк на число столбцов).

При объявлении массива можно выполнить его инициализацию:

Dim z() As Single = {1.3, -2.7, 14.68, -5.5}

В этом примере объявлен одномерный массив z, имеющий 4 элемента, значения

которых заданы списком инициализации.

Массив, при объявлении которого верхние границы индексов не были указаны

(динамический массив), можно неоднократно переобъявлять с помощью инструкции

ReDim.

Среди инструкций внутри процедуры можно записать:

ReDim y(5, 10)

Далее этот массив может быть переобъявлен:

ReDim y(5, 20)

С помощью инструкции ReDim можно изменять только верхние границы индексов.

Размерность массива (количество индексов) можно задать один раз. Изменять ее нельзя.

Инструкцию ReDim можно применять для изменения динамического массива столько раз,

сколько потребуется. Однако при каждом ее применении данные, содержащиеся в

массиве, теряются.

Инструкция ReDim Preserve может увеличить размер массива, сохраняя при

этом его содержимое. В следующем примере показывается, как можно увеличить размер

массива a4 на 10 элементов без уничтожения текущих значений элементов массива. Пусть

был объявлен массив:

Dim a4 () As Integer.

Затем в программе установлен размер этого массива:

ReDim a4 (n).

Далее в программе может быть, например, записано:

ReDim Preserve a4(n+10)

Использование инструкции ReDim Preserve позволяет изменить верхнюю границу

только последней размерности массива.

Имеется возможность присвоить содержимое одного массива другому так же, как это

делается для простых переменных. Но эти массивы должны иметь одинаковые значения

размерностей и одинаковое количество элементов. Если же в левой части оператора

присвоения стоит динамический массив, то совпадение числа элементов не обязательно.

Число элементов массива в левой части оператора присвоения при необходимости

изменится.

Пример.

Dim a() As Integer = {1, 2, 3, 4}, b(), i As Integer

b = a

For i = 0 To 3

MsgBox(b(i))Next

Последовательно будет выведено: 1, 2, 3, 4.

Пример.

sub name(argument 1, , , argument 4)

Именованные аргументы.

При вызове процедур Sub или Function возможна позиционная передача аргументов, т.е. в порядке следования в описании процедуры. Кроме того, аргументы могут передаваться по именам, вне зависимости от позиции. Именованный аргумент состоит из имени аргумента, за которым следует двоеточие со знаком равенства (:=) и значение аргумента: ИмяАргумента := ЗначениеАргументаИменованные аргументы особенно полезны при вызове процедуры с необязательными аргументами (Optional).Если используются именованные аргументы, то запятые для обозначения отсутствующих позиционных аргументов не нужны. С помощью именованных аргументов проще проследить, какие аргументы переданы, а какие опущены. При вызове процедуры с аргументом Optional можно как указывать, так и не указывать необязательный

аргумент. Если аргумент не указан, то для него используется значение по умолчанию.

24) Коллекции, цикл For Each … Next.(неполный)

Данный цикл выполняется один раз для каждого элемента в массиве. У него нет счетчика как в цикле For…Next. Цикл выполняется фиксированное кол-во раз, соответствующее количеству элементов в массиве.

Цикл For Each…Next имеет следующий синтаксис:

For Each x In Array

//операторы//

Next [x]

x – это переменная, которая перебирает все элементы в группе или массиве (в нашем случае это Array)

Array – это массив или коллекция

Graphics.

Все графические изображения подразделяются на векторные и растровые. В векторных

изображениях положение точек (пикселей), из которых они состоят, определяется

аналитически на основе математического определения геометрической фигуры (например,

прямой или эллипса). Растровое изображение тоже состоит из точек. Но в нем каждая

точка определяется отдельно.

Существенное различие между векторной и растровой графикой состоит в том, что

векторная графика не привязана к разрешению экрана. При любом разрешении векторное

изображение будет иметь один и тот же размер, заданный в его определении. Растровое

же изображение при любом разрешении экрана будет содержать одно и то же количество

пикселей. Следовательно, чем выше разрешение экрана, тем меньший физический размер

будет иметь пиксель и тем меньший размер будет иметь растровое изображение.

VB.NET позволяет рисовать практически на любом элементе управления. Чаще всего

графика выводится на двух объектах: Form и PictureBox.

Каждая форма и каждое графическое поле PictureBox обладают своей системой

координат. По умолчанию начало отсчета находится в левом верхнем углу формы. Ось Х направлена

вправо, ось Y – вниз.

Система координат по умолчанию состоит из строк и столбцов графических элементов –

пикселей. Пиксель – это минимально возможная точка, физические размеры которой

зависят от установленной в операционной системе разрешающей способности экрана.

Нумерация строк и столбцов пикселей начинается с 0. Точка с координатами (9, 4)

означает пиксель, находящийся на пересечении столбца № 9 пикселей со строкой № 4

пикселей

Можно загрузить изображение на управляющий элемент на этапе разработки (в состоянии

проекта design). Для этого следует выделить этот объект и в окне свойств найти

свойство Image. Затем в поле значения этого свойства нужно щелкнуть на кнопке с многоточием. В ответ

откроется диалоговое окно Open (открыть), в котором следует выбрать файл, содержащий

изображение.

Для установления соответствия между размерами изображения и размерами

управляющего элемента следует воспользоваться свойством SizeMode последнего (если

управляющий элемент имеет такое свойство). Это свойство может принимать значения:

Normal – размер рисунка не изменяется;

CenterImage – размещение рисунка по центру управляющего элемента (имеет смысл,

если рисунок меньше управляющего элемента);

StretchImage – размер рисунка будет подогнан под размер управляющего элемента;

AutoSize – размер управляющего элемента будет подогнан по размеру рисунка.

Можно загрузить изображение на управляющий элемент на этапе выполнения (в

состоянии проекта Debugging). Следующая инструкция размещает на графическом поле

pbxMoney рисунок, хранящийся в файле dollars.gif:

pbxMoney.Image = System.Drawing.Bitmap.FromFile _

("D:\Моя рабочая папка\dollars.gif")

В состоянии выполнения проекта изображение можно изменять через код проекта.

Свойство Image объекта управления представляет собой объект, следовательно, имеет

свойства и методы для манипулирования изображением.

Можно также удалить изображение на управляющем элементе на этапе выполнения.

Следующая инструкция удаляет рисунок с графического поля pbxMoney:

If Not (pbxMoney.Image Is Nothing) Then

pbxMoney.Image.Dispose()

pbxMoney.Image = Nothing

End If

Так метод RotateFlip позволяет выполнить поворот или зеркальное отображение

рисунка.

Набор классов, предназначенных для вывода текста и изображений, составляет интерфейс

для создания графики – GDI (Graphics Design Interface). GDI+ – это его последняя версия.

Классы GDI+ располагаются в модулях: System.Drawing,

System.Drawing.Drawing2D, System.Drawing.Imaging и

System.Drawing.Text. Необходимые для использования в проекте модули следует

импортировать в проект, поместив в начале кода проекта предложение:

Imports System.Drawing, System.Drawing.Drawing2D, _

System.Drawing.Imaging, System.Drawing.Text

Перед началом рисования нужно выбрать поверхность, на которую будет выводиться

изображение, тип изображения и инструмент. Поверхностью для рисования является

объект Graphics. Выбрав соответствующий метод этого объекта, можно нарисовать

нужную геометрическую фигуру.

Далее выбирается инструмент. Инструментом может быть объект Pen (перо) или объект

Brush (кисть). Перо предназначено для рисования линий или контуров. Кистью можно

нарисовать заполненный контур. Главными характеристиками объекта Pen являются цвет

и толщина линии. Главными характеристиками объекта Brush являются цвет и образец

заполнения фигуры. Кисть может быть градиентной, меняющей цвет по мере своего

движения. Листинг 6.2 содержит код, рисующий на форме две прямые линии.

Подпрограмма Button1_Click рисует горизонтальную прямую линию синего цвета (на

рис. 6.3 эта линия расположена снизу). Подпрограмма Form1_Paint рисует прямую

линию красного цвета (на рис. 6.3 эта линия расположена сверху). Событие Paint

происходит, когда объект или его часть снова становится видимым после того, как он был

перемещен, увеличен, заслонен другим окном или изменил размеры.

Если у управляющего элемента есть свойство Graphics, значит, на нем можно рисовать.

Свойство Graphics возвращает одноименный объект, который представляет набор

методов, необходимых для рисования на поверхности элемента управления. Для

извлечения объекта, связанного с конкретным элементом управления нужно вызвать

метод CreateGraphics этого элемента управления. Например, для рисования на

элементе управления PictureBox1 сначала следует объявить объектную переменную

типа Graphics и инициализировать ее объектом, возвращаемым методом

CreateGraphics элемента управления PictureBox1:

Dim G As Graphics

G = PictureBox1.CreateGraphics

Если же нужно рисовать на форме, необходимо создать объект Graphics с помощью

метода CreateGraphics этой формы:

Dim G As Graphics

G = Me.CreateGraphics

У объекта Graphics имеется несколько базовых свойств. Свойство PageUnit

определяет единицу изменения, которая будет использоваться для выражения координат в

объекте Graphics.

Структуры.

Кроме базовых типов данных, таких как Integer, Long и т.п., VB поддерживает

также типы данных, определяемые пользователем. Они могут быть созданы как на основе

базовых типов данных, так и на основе типов ранее определенных пользователем.

Пользовательский тип данных, называемый структурой, широко применяются при

построении файлов произвольного доступа.

Для определения пользовательского типа (структуры) данных используется

ключевое слово Structure:

[Public/Private]Structure Имя_типа

Dim/Public/Private Элемент1 As Тип

Dim/Public/Private [Элемент2 As Тип]

.

.

.

End Structure

Структура не может быть объявлена внутри процедуры или в функции. Она может быть

объявлена только в начале проекта, а также в форме или в модуле до первой процедуры.

Определив собственный тип данных, Вы можете использовать его для объявления

переменных этого типа. Эти переменные могут быть локальными, переменными области

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

записью. Отдельные компоненты этой переменной называют полями записи. Переменная

пользовательского типа является структурированной. Она подобно массиву включает в

свой состав отдельные элементы, но в отличие от массива, ее элементы могут иметь

разный тип:

Public Class Form1

Structure Товар

Dim Название As String

Dim Цена As Decimal

Dim Номер As Long

End Structure

Dim Инструмент As Товар

Private Sub Button1_Click()

..

.

Инструмент.Название = "Отвертка"

Инструмент.Цена = 120

.

.

.

End Sub

В этом примере определяется тип данных Товар. Затем объявляется переменная

Инструмент типа Товар, а конкретные значения составляющих этой переменной

устанавливаются в процедуре Buttonl_Click.

Доступ к элементам переменной пользовательского типа осуществляется, по аналогии с

доступом к свойствам, путем указания точки после имени переменной. При этом

переменные одинакового типа можно присваивать не поэлементно, а напрямую:

Structure Субъект

Dim Фамилия_и_Инициалы As String

Dim ТабельныйНомер As Integer

End Structure

Dim Читатель, Пользователь As Субъект

Private Sub Button1_Click()

Пользователь.Фамилия_и_Инициалы = "Иванов И.И."

Пользователь.ТабельныйНомер = 218739

Читатель = Пользователь

End Sub

Переменные Читатель и Пользователь относятся к одному типу Субъект. Поэтому

они присваиваться напрямую, а не поэлементно.

Пользовательские типы данных могут быть составными. В этом случае важна

последовательность определения типов. Сначала нужно определить базисный тип,

который будет использоваться далее в составных типах. Если не соблюдать это правило,

то после запуска программы появится сообщение об ошибке. Ниже приводится пример

использования составных пользовательских типов данных:

Structure Персона

Dim Имя As String

Dim Фамилия As String

End Structure

Structure Клиент

Dim Идентификатор As Персона

Dim ДеньРождения As Date

End Structure

Dim Покупатель As Клиент

Private Sub Button1_Click()

Покупатель.Идентификатор.Имя = "Иван"

Покупатель.Идентификатор.Фамилия = "Петров"

End Sub

Можно в подпрограмме Button1_Click создать массив записей:

Dim Персоны(100) As Персона

Обращение к полям седьмого элемента этого массива выглядит так:

Персоны(6).Имя

Персоны(6).Фамилия

В качестве элементов структуры можно использовать массивы.

Данные пользовательского типа рекомендуется использовать при обработке

данных неизменной структуры.

28)Файлы с последовательным доступом, открытие, запись, чтение.

Записать в файл последовательного доступа произвольного (по желанию

пользователя) числа записей. Затем все записи прочитать из файла и отобразить в

текстовом поле.

Работа с файлом последовательного доступа

Private Sub btnПуск_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles btnПуск.Click

Dim s, ss As String

Dim k As Integer

Dim b As Boolean

k = FreeFile()

5: FileOpen(k, "E:\MY Documents\F1.txt", OpenMode.Output)

Do Until b

s = InputBox("Содержание записи = ?")

PrintLine(k, s)

s = InputBox("Продолжать? Введите да или иное - (нет)")

10: If s = "да" Then b = False Else b = True

Loop

FileClose(k)

k = FreeFile()

FileOpen(k, "E:\MY Documents\F1.txt", OpenMode.Input)

15: ss = “”

Do Until EOF(k)

s = LineInput(k)

ss = ss & s & vbCrLf

Loop

20: FileClose(k) txtЖурнал.AppendText(ss)

End Sub

Чтобы иметь возможность использовать файл, его нужно открыть или создать, если он

еще не существует. Функция FileOpen(), выполняющая эту операцию, принимает

множество аргументов, из которых обязательными являются только первые три:

FileOpen(number, path, mode _

[, access][, share][, recordLen])

В аргументе number задается номер файла, предварительно полученный с помощью

функции FreeFile().В аргументе path задается путь к открываемому файлу. Аргумент

mode определяет режим открытия файла и может содержать одно из значений,

перечисленных в табл.

Значение Описание
OpenMode.Input Файл открывается только для ввода данных (то есть для чтения из файла)
OpenMode.Output Файл открывается только для вывода (то есть для записи в файл)
OpenMode.Append Файл открывается для добавления новых данных

В файле с последовательным доступом изменять отдельные элементы данных

нельзя. Можно либо прочитать их (а при желании и сохранить в другом файле), либо

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

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

нужно снова открыть этот файл, на этот раз в режиме Output, и сохранить в нем новые

данные.

Если не нужно перезаписывать существующий файл, и Вы хотите просто добавить в него

данные (не меняя существующие), откройте файл в режиме Append.В случае открытия файла в режиме Output (и только в этом режиме) VB сотрет его

содержимое, даже если Вы ничего в него не запишете. Более того, VB не станет

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

Аргумент access определяет, следует ли открыть файл для чтения (Read), записи

(Write) или и чтения, и записи (ReadWrite). Если открыть файл с опцией Read,

программа не сможет модифицировать его даже по ошибке. Данный аргумент не имеет

никакой связи с типом файла. Файлы с последовательным доступом можно открывать

лишь с опциями Read и Write, поскольку их можно либо только записывать, либо

только считывать. Аргумент access предназначен исключительно для защиты данных от

случайного изменения. Если Вам нужно прочитать данные из файла, откройте его с

опцией Read, что позволит исключить риск их изменения.

Аргумент share определяет права других приложений Windows на то время, пока ваше

приложение держит файл открытым.

ФункцияPrintLine() записывает данные в файл с последовательным доступом:

PrintLine(file_number, output_list)

В ее первом аргументе задается номер файла, в который производится запись, а в

остальных аргументах – записываемые значения. Аргумент output_list представляет

собой массив параметров, через который функции можно передать любое количество

значений:

PrintLine(n, v1, v2, "Петров", 123.456)Если в файл записывается несколько значений, они разделяются запятыми, и каждая такая

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

Зоне вывода соответствуют 14 позиций.

Для чтения очередной записи данных из файла с последовательным доступом

используется функция LineInput():

LineInput(file_number)

В аргументе file_number ей передается номер уже открытого файла. При первом

вызове она считывает все символы от начала файла до первого символа новой записи.

Когда Вы вызываете ее во второй раз, она возвращает все последующие символы вплоть

до следующего символа новой записи.

Символ новой строки не включается в результирующие данные – он используется только

в качестве разделителя. Приведенный ниже код прочитает две очередные записи файла и

присвоит их строковым переменным st1 и st2:

st1 = LineInput(n)

st2 = LineInput(n)

Если требуется сохранить в файле на диске обычный текст, следует создать для этой цели

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

открыть файл снова и прочитать текст построчно с помощью функции LineInput().

FilePut(file_number, value[, record_number]),

FileGet(file_number, value[, record_number])

29) Файлы с произвольным доступом и двоичные файлы, открытие, запись, чтение.

Режим Random предназначен для файлов с произвольным доступом, а Binary – для двоичных

файлов.

Значение Описание
OpenMode.Random Файл открывается для произвольного доступа (чтения и записи, по одной записи зараз)
OpenMode.Binary Файл открывается как двоичный

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

Каждой из них может быть передан номер записи, с которой Вы хотите работать. В

аргументе record_number задается номер записи, а в аргументе value – переменная,

содержащая записываемую в файл запись или принимающая запись, которая считывается

из файла. Аргумент record_number не обязателен; если он не задан, будет

записываться или считываться текущая запись. После записи или чтения очередной

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

FilePut() десять раз подряд без указания номера записи, Вы последовательно

создадите или перезапишете первые десять записей файла с произвольным доступом.

Точно так же, вызвав десять раз подряд функцию FileGet() без указания номера

записи, Вы последовательно прочитаете первые десять записей файла.

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

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

Информация о каждом из товаров содержится в структуре Товар, определяемой

следующим образом:

Structure Товар

Dim Код As String

Dim Название As String

Dim Цена As Decimal

End Structure

Структура Товар будет использоваться для хранения информации о товаре перед ее

записью в файл. Начнем с объявления переменой типа Товар:

Dim Тов As Товар

Теперь можно присвоить значения полям структуры Тов:

Тов.Код = "TV00180-A"

Тов.Название = "SONY Trinitron TV"

Тов.Цена = 799.99

Для записи данных, хранящихся в переменной Тов, в файл с произвольным доступом, мы

воспользуемся функцией FilePut(). Конечно, файл сначала нужно создать с помощью

инструкций:

fn = FreeFile()

FileOpen(fn, "c:\products.dat", OpenMode.Random)

Как видите, последний аргумент, в котором задается длина записи, здесь опущен. Записи

содержат строки, следовательно, имеют переменную длину. Информация о длине каждой

строки хранится вместе с самой строкой, так что определять длину каждой записи не

понадобится. Далее переменная Тов записывается в файл с помощью инструкции:

FilePut(fn, Тов)

Обратите внимание, что номер записи, в которой сохраняются данные, не указан. Вы

можете изменить значения полей и сохранить в файле следующую запись с помощью

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

помощью инструкции FileClose(fn).

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

функции FileOpen(), с помощью которой мы открывали его для записи данных:

fn = FreeFile()

FileOpen(fn, "c:\products.dat", OpenMode.Random)

Затем обычно выполняется цикл чтения записей.

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

записи разной длины с помощью функции FilePut() и как их прочитать с помощью

функции FileGet(). Прежде всего, добавьте в форму до первой процедуры следующее

объявление структуры:

Structure Товар

Dim Код As St

Наши рекомендации