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

1432

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

Методы WriteLine и Write могут выводить значения простых переменных так и целиком всего массива типа char, например:

Dim n As Integer = 1

Dim c() As Char = {“A”, “B”, “C”, “D”, “E”} fo.Write(n)

fo.Write(c)

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

fo.Close()

fs.Close()

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

Dim w As New StreamWriter(fs, _ System.Text.Encoding.GetEncoding(1251))

Аналогично упомянутая проблема решается при чтении текста на русском языке.

Dim w As New StreamReader(fs, _ System.Text.Encoding.GetEncoding(1251))

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

В программе используются строковая переменная s, целочисленная переменная i, a также fo – член класса StreamWriter. Ошибки при создании файла, а также при записи в него информации генерируют исключение IOException. Массив типа char выводится посимвольно fo.Write(c(i)), а затем весь сразу одной командой fo.WriteLine(c).

‘Пример 2.1

Imports System.IO

Module Module1

Private Const FN As String = "a.txt" Sub Main()

Dim fs As FileStream Try

fs = New FileStream(FN, FileMode.Create) Catch e As IOException Console.WriteLine(e.Message)

29

Return

End Try

Dim s As String = "Вывод в текстовый файл" Dim i As Integer

Dim c(26) As Char

For i = 0 To 25 c(i) = Chr(i + 65) Next i

Dim fo As New StreamWriter(fs) Try

fo.WriteLine(s) For i = 0 To 26 fo.Write(c(i)) Next fo.WriteLine() fo.WriteLine(c)

fo.WriteLine("Конец")

Catch e As IOException Console.WriteLine(e.Message) End Try

fo.Close()

fs.Close()

Console.WriteLine("Создан файл a.txt")

Console.ReadLine()

End Sub

End Module

2.2. Задание на тему «Создание текстового файла»

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

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

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

30

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

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

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

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

2.3. Чтение информации из текстового файла

Открытие текствого файла может быть выполнено командами: Dim fs As FileStream

fs = New FileStream(“a.txt”, FileMode.Open)

Для чтения символьной информации из текстового файла можно использовать методы Read и ReadLine класса StreamReader. Метод Read позволяет считывать из файла по одному символу.

Dim fi As New StreamReader(fs) Dim s As String = fi.ReadLine()

Метод ReadLine читает из файла текущую строку целиком. Если достигнут конец файла, то метод возвращает null.

Dim s As String = fi.ReadLine()

Можно загрузить текстовый файл целиком в одну строковую переменную с помощью метода ReadToEnd.

Dim s As String = fi.ReadToEnd

Метод ReadBlock позволяет прочитать определенное количество символов, размещая их в массиве, начиная с указанного номера элемента:

Dim c1(26) As Char fi.ReadBlock(c1, 0, 26)

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

fi.Close()

Цикл с предусловием

При вводе из файла набора данных обычно используется цикл. Так как заранее неизвестно, сколько строк (или символов) в файле, оправдано применить не цикл со счетчиком, а цикл с предусловием While. Он имеет слующую форму:

While условие

31

Группа операторов

End While

Группа операторов в теле цикла выполняется до тех пор, пока условие имеет значение true. Например, следующий фрагмент кода вычисляет произведение элементов числовой последовательности до тех пор, пока оно не превысит 1000.

Dim n As Integer = 1

Dim p As Integer = 1 While p<1000

n = n +1 p = p * n End While

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

Программа читает информацию из текстового файла, созданного в примере из предыдущей темы. Используются массив с типа char, строковая переменная s, целочисленная переменная i, a также fi – член класса StreamReader. Обрабатываются исключения

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

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

‘ Пример 2.2

Imports System.IO

Module Module1

Private Const FN As String = "a.txt" Sub Main()

‘ Открыть файл для чтения

Dim fs As FileStream Try

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

Return

End Try

Dim s As String

32

Dim i As Integer

Dim c(26) As Char

Dim fi As New StreamReader(fs)

Try

‘ Читать одну строку s = fi.ReadLine() Console.WriteLine(s) For i = 0 To 26

‘ Читать очередной символ (код символа) c(i) = Chr(fi.Read())

Console.Write(c(i)) Next Console.WriteLine()

Читать два кода 13 и 10, означающих конец строки

Console.WriteLine(fi.Read().ToString()) Console.WriteLine(fi.Read().ToString())

Читать блок символов в массив

Dim c1(26) As Char fi.ReadBlock(c1, 0, 26) Console.WriteLine(c1)

Catch e As EndOfStreamException

Console.WriteLine(e.Message)

End Try

‘ Закрыть файл fi.Close() fs.Close()

Console.WriteLine("Прочитан файл a.txt") Console.ReadLine()

End Sub

End Module

33

2.4. Задание на тему «Чтение информации из текстового файла»

Задание для студентов: cоздать на языке Visual Basic консольное приложение, читающее строки из текстового файла и отображающее их на экране.

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

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

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

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

Создать текстовый файл с исходными данными.

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

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

34

3. ОБРАБОТКА ДАННЫХ

3.1. Формирование массива

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

Dim имя_массива(макс_индекс) As тип

Здесь тип – это базовый тип данных каждого элемента массива. Целая величина макс_индекс определяет максимальный номер элемента массива. Минимальный номер равен 0. В следующей строке объявляется массив целых чисел, состоящий из 11 элементов. Первый элемент имеет индекс 0, а последний – 10.

Dim a(10) As Integer

Сэлементами массива можно выполнять все те же действия, что

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

Dim a(10) As Integer Dim n As Integer A(0) = 10

A(1) = 7 n = 2

a(n) = a(0)+a(n-1)

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

Dim b() As Double = {0.0,1.0,2.0,3.0,4.0}

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

35

Dim b2() As Double = New Double() {0.1, 1.3, 2.5, 3.7, 4.9}

В еще одном варианте объявления массив создается в одной строке, а инициализируется в другой:

Dim b3() As Double

b3 = New Double() {0.01, 1.02, 2.03, 3.04, 4.05}

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

В примере создается один целочисленный и 3 вещественных массива из 5 элементов. В целочисленный массив заносятся случайные числа от 10 до 99. Вещественные массивы инициируются непосредственно при объявлении. Затем значения элементов массива выводятся на экран.

‘ Пример 3.1

Module Module1 Sub Main()

Dim A(4) As Integer

Dim b() As Double = {0.02, 1.04, 2.06, 3.08, 4.1}

Dim b2() As Double = New Double() {0.1, 1.3, 2.5, 3.7, 4.9} Dim b3() As Double

b3 = New Double() {0.01, 1.02, 2.03, 3.04, 4.05} For I As Integer = 0 To 4

A(I) = 10 + Int(90*Rnd) Next I

For i As Integer = 0 To 4

Console.Write(A(i))

Console.Write(" " & b(i).ToString("00.00")) Console.Write(" ") Console.Write("{0:R2}", b2(i)) Console.Write(" ") Console.Write("{0:F2}", b3(i)) Console.WriteLine()

Next Console.ReadLine() End Sub

End Module

При выводе чисел использовано 3 способа форматирования. Первый – b(i).ToString("00.00") означает, что число выводится с

36

обязательными 2 знаками до запятой и 2 знаками после запятой. Второй и третий форматы похожи – они означают, что число выводится с обязательными 2 знаками после запятой. Числа отделяются друг от друга пробелами.

3.2. Задания на тему «Формирование массива»

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

Таблица 3.1

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

Вариант

Массив 1

Массив 2

1

char

integer

2

char

long

3

char

single

4

char

double

5

char

short

6

byte

integer

7

byte

long

8

byte

single

Вариант

Массив 1

Массив 2

9

byte

double

10

single

integer

11

single

long

12

single

short

13

double

integer

14

double

long

15

double

short

 

 

 

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

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

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

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

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

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

3.3. Обработка массивов

Процедуры, которые применяются для обработки и анализа больших массивов данных, – это сортировка, фильтр, поиск. Мы не будем рассматривать традиционные алгоритмы. Для обработки данных воспользуемся методами класса System.Array. Рассмотрим массив целых чисел a1.

Dim a1() As Integer = {2,4,3,7,1,8,6,9,0,5}

37

В данной строке длина массива не указана явно. Ее можно определить с помощью метода Length.

Dim n As Integer = a1.Length

Сортировка массива a1 выполняется с помощью метода Sort: Array.Sort(a1)

Переставить элементы местами a1 так, чтобы первый стал последним, второй предпоследним и т.д., можно, применив метод

Reverse: Array.Reverse(a1)

Копирование элементов одного массива в другой реализуем с помощью метода Copy, указав для первого массива индекс элемента, с которого начинается копирование, для второго – индекс элемента, с которого начинается вставка. Последний параметр – это количество копируемых элементов.

Dim a2(9) As Integer

Array.Copy(a1,0,a2,0,10)

Команда копирования может преобразовать тип числовых данных, при условии, что данные совместимы. Например, можно копировать данные из массива типа int в массив типа double.

Dim a3(9) As Double a1.CopyTo(a3, 0)

Поиск позиции элемента, равного указанному значению, выполняет метод IndexOf. В том случае, если элемент не найден, метод возвращает значение -1.

Dim n As Integer = Array.IndexOf(a1,9)

Для отсортированного массива аналогичное действие выполняет метод BinarySearch.

Dim n As Integer = Array.BinarySearch(a1,9)

Позицию последнего элемента, имеющего указанное значение, определяет метод LastIndexOf.

Dim n As Integer = Array.LastIndexOf(a1,9)

Для того чтобы очистить часть массива, то есть заполнить элементы нулями, требуется метод Clear. Например, следующая строка обнуляет 4 элемента массива, начиная с элемента, имеющего номер 6.

Array.Clear(a1, 6, 4)

38

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