Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1432

.pdf
Скачиваний:
1
Добавлен:
07.01.2021
Размер:
1.15 Mб
Скачать

Опрос элементов коллекции

Коллекция – это группа объектов. Одним из типов коллекций является массив. Для опроса элементов коллекции используется цикл For Each, формат которого представлен ниже.

For Each переменная As Тип in коллекция Инструкции

Next

Здесь тип и переменная определяют итерационную переменную, которая в процессе работы цикла For Each будет получать значения элементов из коллекции. Итерационную переменную можно использовать только для чтения. При опросе массива тип должен совпадать с базовым типом массива. Цикл последовательно опрашивает элементы массива в направлении от наименьшего индекса к наибольшему. Например, следующие строки кода суммируют элементы массива целых чисел a1.

‘ Пример 3.2

Dim S As Integer = 0

For Each n As Integer in a1 S = S + n

Next

Для преждевременного выхода из цикла до окончания опроса коллекции предназначена инструкция Exit For. Например, следующий пример определяет, есть ли среди элементов массива нуль.

‘ Пример 3.3

Dim F As Boolean = False For Each n As Integer in a1 If n=0 Then

F = True

Exit For

End If

Next

Пример программы

Впримере создается целочисленный массив a1 из 20 элементов.

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

39

10 до 99. Затем массив сортируется. Создается вещественный массив a2, в который копируются данные из a1. Порядок элементов массива a2 меняется на обратный. По два состояния каждого массива выводятся в текстовый файл.

‘ Пример 3.4

Module Module1

Sub Main() Dim i As Integer

Dim fo As Integer

Dim a1(20) As Integer For i = 0 To a1.Length - 1 a1(i) = 10 + 90 * Rnd() Next

Try

fo = FreeFile()

FileOpen(fo, "a.txt", OpenMode.Output)

Catch E As IOException

Console.WriteLine(E.Message)

End Try

Try

WriteLine(fo, "Массив чисел типа int")

For Each n As Integer In a1

Write(fo, n)

Next

WriteLine(fo)

Array.Sort(a1)

WriteLine(fo, "Массив упорядочен")

For Each n As Integer In a1

Write(fo, n)

Next

WriteLine(fo)

Dim a2(20) As Double a1.CopyTo(a2, 0)

WriteLine(fo, "Массив чисел типа double")

40

For Each x As Double In a2

Write(fo, x)

Next

WriteLine(fo)

Array.Reverse(a2)

WriteLine(fo, "Порядок элементов обратный")

For Each x As Double In a2

Write(fo, x)

Next

Catch E As IOException

Console.WriteLine(E.Message)

End Try

FileClose(fo)

Console.WriteLine("Создан файл a.txt с 4 рядами чисел") Console.ReadLine()

End Sub

End Module

3.4. Задания на тему «Обработка массивов»

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

Таблица 3.2

Варианты задания на тему «Формирование массива»

Вариант

Массив 1

Массив 2

1

byte

integer

2

byte

long

3

byte

single

4

byte

double

5

short

integer

Вариант

Массив 1

Массив 2

6

short

long

7

short

single

8

short

double

9

integer

single

10

integer

double

41

Порядок выполнения лабораторной работы

Создать новый проект – консольное приложение.

Добавить необходимый программный код.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

42

4.БИНАРНЫЕ ФАЙЛЫ

4.1.Запись данных в бинарный файл

Данные в бинарный файл записываются не в символьном виде, а в том, в котором они хранятся в памяти. Для записи данных применяются методы Write, которые записывают данные всех встроенных Visual Basic-типов в их внутреннем формате. В частности, строка string записывается вместе со значением ее длины. Для создания бинарного файла используется класс BinaryWriter, который представляет собой оболочку для байтового потока, которая управляет записью двоичных данных. Пример создания файла:

Dim Fs As FileStream

Fs = New FileStream(F_Name, FileMode.CreateNew)

При этом, если файл с указанным именем существует, то произойдет ошибка. Если в первой строке использовать параметр FileMode.Create, то существующий файл будет удален и создан новый с тем же именем. Для записи данных в бинарный файл используются методы, представленные в табл. 4.1.

Таблица 4.1

Методы вывода данных класса BinaryWriter

Метод

Описание

Write(sbyte

val)

Записывает один байт со знаком

 

 

 

Write(byte

val)

Записывает один байт без знака

 

 

 

Write(byte[]

buf)

Записывает массив байтов

 

 

 

 

Write(short

 

val)

Записывает целое число типа short

 

 

 

Write(ushort

val)

Записывает целое число типа ushort (без знака)

 

 

Write(int val)

Записывает целое число типа int

 

 

 

Write(uint

val)

Записывает целое число типа uint (без знака)

 

 

 

Write(long

val)

Записывает целое число типа long (длинное целое)

 

 

 

Write(ulong

val)

Записывает целое число типа ulong (без знака)

Write(float

val)

Записывает вещественное число типа float

 

 

Write(double val)

Записывает вещественное число типа double

 

 

 

Write(char

val)

Записывает символ

 

 

 

Write(char[]

val)

Записывает массив символов

 

 

 

Write(string

val)

Записывает строку типа string (включая ее длину)

 

 

 

 

43

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

Dim Fb As New BinaryWriter(Fs)

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

вфайл, связанный с созданным экземпляром Fb класса BinaryWriter, а в другой – запись трех элементов, начиная с пятого (числа 5, 6, 7): Dim a As Byte = {0,1,2,3,4,5,6,7,8,9}

Fb.Write(a)

Fb.Write(a,5,3)

Классы определены в пространстве имен System.IO, доступ к которому возможен после добавления в начало программы строки Option System.IO. В случае неудачного исхода операции чтения генерируется исключение IOExcepion.

Закрытие файла выполняется с помощью метода Close, например: Fb.Close()

Fs.Close()

Пример программы

В программе создаются 2 массива. Значения элементов массивов b и c задаются в цикле. Это латинские символы и их однобайтовые коды. Массивы b и c выводятся в файл целиком. Ошибки открытия файла, а также ошибки записи данных генерируют исключение IOExcepion. Команда Return в первом Catch-блоке завершает программу в случае ошибки при открытии файла.

‘ Пример 4.1

Imports System.IO

Module Module1

Private Const FN As String = "b.bin" Sub Main()

Dim fs As FileStream Try

fs = New FileStream(FN, FileMode.Create)

44

Catch e As FileNotFoundException

Console.WriteLine(e.Message)

Return

End Try

Dim i As Integer

Dim b(26) As Byte

Dim c(26) As Char

For i = 0 To 25

b(i) = i + 65

Next i

For i = 0 To 25

c(i) = Chr(i + 65)

Next i

Dim w As New BinaryWriter(fs) Try

w.Write(b, 0, 26) w.Write(c, 0, 26) Catch e As Exception

Console.WriteLine(e.Message) End Try

w.Close()

fs.Close()

Console.WriteLine("Создан файл b.bin")

Console.ReadLine()

End Sub

End Module

Так как в качестве данных использованы символы и их коды, содержимое бинарного файла можно просмотреть с помощью программы Блокнот.

4.2. Задание на тему «Запись данных в бинарный файл»

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

45

Таблица 4.2

Варианты заданий на тему «Запись данных в бинарный файл»

Вариант

Массив 1

Массив 2

1

char

short

2

char

int

3

char

long

4

char

float

5

char

double

Вариант

Массив 1

Массив 2

6

byte

short

7

byte

int

8

byte

long

9

byte

float

10

Byte

double

Порядок выполнения лабораторной работы

Создать новый проект – консольное приложение.

Добавить необходимый программный код.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

4.3. Чтение данных из бинарного файла

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

Dim fs As New FileStream

fs = New FileStream(F_Name, FileMode.Open, FileAccess.Read)

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

Таблица 4.3

Методы ввода данных класса BinaryReader

Метод

Описание

1

2

Read()

Читает один байт

Read(мас_byte, поз_мас, кол_байт)

Читает указанное количество байтов в

массив

ReadBytes(количество)

Читает символы и возвращает в виде

массива

 

Read(мас_char, поз_мас, кол_симв)

Читает символы в массив

ReadBoolean()

Читает значение типа bool

46

 

Окончание табл. 4.3

 

 

1

2

ReadByte()

Читает значение типа byte

ReadSByte()

Читает значение типа sbyte

ReadChar()

Читает значение типа char

ReadChars(количество)

Читает символы и возвращает в виде

массива

 

ReadDouble()

Читает значение типа double

ReadSingle()

Читает значение типа float

ReadInt16()

Читает значение типа short

ReadInt32()

Читает значение типа int

ReadInt64()

Читает значение типа long

ReadString()

Читает значение типа string

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

BinaryReader.

Dim fb As New BinaryReader(fs)

В следующих строках выполняется чтение из файла, связанного с описанным выше экземпляром класса BinaryReader: сначала 10 байтов в массив, начиная с элемента с индексом 0; затем одного вещественного числа типа single и одного целого числа типа long.

Dim a(26) Fb.Read(a, 0, 10)

Dim x As single = Fb.ReadSingle() Dim n As long = Fb.ReadToInt64()

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

Пример программы

В программе создаются 2 массива. С помощью одной команды читаютя 26 байтов в массив a, затем аналогично читаются данные в массив b. Прочитанные данные выводятся на экран, при этом байты, которые подразумеваются кодами символов, при выводе преобразуются в символы. Обрабатываются исключения

FileNotFoundException (файл не найден) и EndOfStreamException

(попытка чтения после конца потока).

47

‘ Пример 4.2

Imports System.IO

Module Module1

Private Const FN As String = "b.bin" Sub Main()

Dim fs As New FileStream Try

fs = New FileStream(FN, FileMode.Open, FileAccess.Read) Catch e As FileNotFoundException Console.WriteLine(e.Message)

Return

End Try

Dim r As New BinaryReader(fs)

Try

b = r.ReadBytes(26)

c = r.ReadChars(26)

Catch e As EndOfStreamException

Console.WriteLine(e.Message)

End Try

r.Close()

fs.Close()

For i = 0 To 25

Console.Write(Chr(b(i)))

Next i

Console.WriteLine()

For i = 0 To 25

Console.Write(c(i))

Next i

Console.ReadLine()

End Sub

End Module

48

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]