
- •Строки
- •События, связанные с клавиатурой
- •Списки
- •Управляющий элемент ListBox
- •List
- •Внешний вид: стандартный или с флажком
- •Содержит количество строк в списке
- •Описание
- •Управляющий элемент ComboBox
- •Изменение характеристик шрифта
- •Количество экранных и принтерных шрифтов
- •Файлы
- •Режимы доступа к файлам
- •Текстовые файлы
- •Управляющие элементы для работы с файлами
- •Открыть диалог установка параметров принтера

End Sub
Private Sub Combo2_Click()
Text1.FontSize = Combo2.Text
End Sub
Private Sub Form_Load()
For i = 0 To Screen.FontCount - 1
Combo1.AddItem |
Screen.Fonts(i) |
Next |
|
List1.Selected(0) = True |
'Курсив |
Combo1.ListIndex = 4 'Arial Cyr Combo2.ListIndex = 5 '16 size
End Sub
Private Sub Command1_Click()
End
End Sub
Рис.38
В дальнейшем Вы познакомитесь с элементом управления CommonDialog и API-функциями ядра Windows, которые также позволяют менять характеристики шрифта.
Файлы
Режимы доступа к файлам
Файл – это именованная область во внешней памяти, содержащая информацию определенного типа, которую требуется считывать, анализировать и сохранять. Процесс работы с файлом можно представить следующей общей схемой.
•Получить дескриптор файла (ДФ).
•Открыть файл.
•Прочитать данные (в переменную из файла или из памяти).
•Записать данные (из переменной или из поля в файл).
•Закрыть файл.
Для работы с файлами VB предлагает специальные операторы и функции.
При обращении приложения к файлу на диске в программе должны быть предусмотрены инструкции о количестве байт считываемых или записываемых данных и о типе этих данных в файле. Visual Basic поддерживает три режима доступа к файлу.
•Последовательный доступ предназначен для чтения непрерывных блоков из текстового файла и записи в текстовый файл.
•Произвольный доступ – для чтения и записи данных в текстовые и типизированные файлы заданной структуры и длины.
•Двоичный доступ – для чтения и записи данных в файлы переменной структуры.
Текстовые файлы
Текстовые файлы – это файлы с последовательным доступом к данным. Запись и чтение информации из текстовых файлов происходит построчно и строго последовательно. При этом каждая строка может содержать помимо кириллицы, латиницы и спецсимволов еще и символы перевода строки (vbCrLf или Chr(13) & Chr(10)) и табуляторы (vbTab или Chr(9)). Текстовые файлы можно сравнить с аудиоили видеоинформацией, хранящейся на магнитной ленте. Для поиска нужного места на ленте ее следует перемотать или последовательно просмотреть (прослушать). Существуют следующие три режима открытия текстовых файлов.
•Input – для ввода (чтения) данных (текста) из файла.
•Output – для вывода (записи) данных (текста), начиная с первой позиции. Если файл существовал, то он удаляется с диска и заново создается.
•Append – для добавления данных (текста) в конец файла. При этом вся старая информация в файле сохраняется.
Для того чтобы работать с файлами, необходимо получить от системы дескриптор файла – канал ввода-вывода данных, который представляет собой уникальный номер. Свободный номер канала можно получить с помощью функции FreeFile [(<Range>)], где Range может принимать значение 1 или 0. Когда Range=0, то выбор каналов осуществляется из диапазона чисел от 0 до 255, если 1, то из диапазона чисел от 256 до 511.
Чтобы связать имя файла с ДФ, используется оператор:
Open <Имя_файла > For Input|Output|Append As <ДФ> [Len=<Число>]
Имя_файла – строка, представляющая собой полный маршрут к открываемому файлу.
Если файл открывается для чтения, то он должен существовать, иначе возникнет ошибка. При попытке открыть несуществующий файл для вывода или добавления оператор создает файл и открывает его. Если открыть для вывода уже существующий файл, его прежнее содержимое теряется. Необязательный параметр у ключевого слова Len задает размер буфера для записи или чтения данных. После выполнения операций записи и добавления данных, файл следует закрыть оператором Close. Его синтаксис:
Close [<Список ДФ>]
Список ДФ – это записанные через запятую дескрипторы. Если список ДФ отсутствует, то будут закрыты все файлы. Например,
Open “C:\Тест1.txt” For Input As 1 |
'Открыть 2 файла |
Open “C:\Тест2.txt” For Input As 2 |
'для чтения |
Fn=FreeFile
'получить канал ввода-вывода и открыть 3-й файл для записи
Open “C:\Результаты.txt” For Output As fn
<Далее следуют операторы работы с файлами>
Close 1, 2, fn
Запись в текстовый файл осуществляется либо оператором Write # , либо оператором Print #. Оба они записывают данные в файл текстовыми строками, заканчивающимися маркером конца строки (vbCrLf – аналог клавиши Enter). Синтаксис операторов следующий:
Write #<ДФ>[,<Список значений>]
Print #<ДФ>[,<Список значений>]
ДФ в этих операторах должен совпадать с ДФ при открытии. Список значений – это (элементы) переменные, выражения или константы, записанные через разделитель. Если список значений отсутствует, то в файл будет записана пустая строка, заканчивающаяся маркером конца строки. В операторах Write, Print символ # должен присутствовать обязательно, иначе вывод будет происходить на форму.
Воператоре Write разделителем в списке значений может быть только запятая. Тогда значения списка будут записаны в одну текстовую строку в файле также через запятую. При этом элементы типа String заключаются в кавычки.
Воператоре Print разделителем в списке значений может быть либо запятая, либо точка с запятой. Если разделитель «;», то значения списка будут записываться подряд без промежутков между ними. Если разделитель запятая, то значения будут записываться через табуляторы.
Всписке значений можно использовать функции: Spc(n) – для вставки n пробелов между значениями и Tab(n) – для указания номера n-й колонки, с которой следует начать вывод.
Пример 30. Продемонстрировать работу с текстовыми файлами. Для этого:
•сформировать с клавиатуры краткую информацию, состоящую из полей: фамилия, имя и год рождения студента, и записать ее на диск различными операторами;
•записать информацию в файл из текстового поля;
•прочитать информацию из файлов в окно формы и в объекты ListBox.
Private Sub Form_Load()
Dim f As String, n As String, y As Integer
Open "C:\1.txt" For Output As 1
Open "C:\2.txt" For Output As 2 For i = 1 To 5
f = InputBox("Ввод данных", "Фамилия") n = InputBox("Ввод данных", "Имя")
y= Val(InputBox("Ввод данных", "Год"))
‘Здесь Год необходимо преобразовать в число с помощью функции Val,
‘иначе оператор Write запишет его в файл как строку в кавычках. Write #1, f, n, y
Print #2, Tab(4); f; Spc(3); n; Spc(3); y
Next i
Close
End Sub
Чтобы записать содержимое текстового поля в файл, достаточно обратиться к полю в операторе Print #. Например,
Private Sub Command1_Click()
Fn% = FreeFile |
'Получить свободный номер для файла |
Open "C:\3.txt" For Output As Fn |
|
Print #Fn, Text1 |
'Записать текст из поля в файл |
Close Fn |
'Закрыть файл |
End Sub |
|
Для записи строк в файл необходимо всегда пользоваться оператором
Print #.
Чтение тестового файла возможно следующими способами.
•С помощью операторов Input # и Line Input #
•С помощью функции Input()
Оператор Input # имеет следующий синтаксис:
Input #<ДФ> <СписокПеременных>
СписокПеременных – это записанные через запятую переменные любого типа. Например, Fam$, Name$, Year%, где $ – тип String,
а % – тип Integer.
При этом тип и количество переменных в СпискеПеременных должны совпадать с количеством и типом данных, считываемых из файла.
Для считывания информации из файла построчно удобно использовать операторы циклов Do…Loop…. В условии этих операторов следует использовать функцию EOF(ДФ), которая возвращает значение True при попытке прочтения данных после последней строки текста. Например,
Private Sub Command2_Click() 'Чтение из 1.txt в List
Open "C:\1.txt" For Input As 1
Do While Not EOF(1)
Input #1, Fam$, Nam$, Yea%
List1.AddItem Fam
List2.AddItem Nam
List3.AddItem Yea
Loop
Close
End Sub
Чтобы прочитать из файла всю строку целиком, а не отдельные элементы, используют оператор Line Input #. Он имеет следующий синтаксис:
Line Input #<ДФ> <Переменная>,
где Переменная – переменная типа String или Variant. Например,
Dim s As String
Private Sub Command3_Click() 'Чтение из 1.txt на форму
Open "C:\1.txt" For Input As #1
Do Until EOF(1)
Line Input #1, s
Print s
Loop
Close
End Sub
Private Sub Command4_Click() 'Чтение из 2.txt на форму
Open "C:\2.txt" For Input As #2
Do Until EOF(2)
Line Input #2, s
Print s
Loop
Close
End Sub
Private Sub Command5_Click() 'Чтение из 3.txt на форму
Open "C:\3.txt" For Input As #3
Do Until EOF(3)
Line Input #3, s
Print s
Loop
Close
End Sub
Private Sub Command6_Click()
End
End Sub

Рис.39. Результат выполнения примера
Оператор Print автоматически после вывода строки на форму перемещает курсор на следующую строку.
Считанная из файла строка с помощью оператора Line Input # не включает символы chr(13) & chr(10). Поэтому если строка помещается в текстовое поле, то в конец каждой строки нужно добавлять константу (vbCrLf), обеспечивая переход на новую строку. Кроме этого, при формировании многострочного текста никогда не следует забывать настраивать текстовое поле с помощью свойств MultiLine=True и ScrollBars=Vertical.
Пример 31. Дан текстовый файл Массивы.txt. Упорядочить символы каждой строки файла в памяти и вывести их в текстовое поле.
'Здесь из строки файла формируется массив символов и 'происходит сортировка их в памяти методом выбора
Private Sub Command2_Click()
Dim a() As String 'Динамический массив символов строки
Dim n As String * 1, s As String, st As String Open "C:\Массивы.txt" For Input As 1
Do While Not EOF(1)
Line Input #1, s |
|
k% = Len(s) |
|
ReDim a(k) |
|
For i% = 1 To k |
|
a(i) = Mid(s, i, 1) |
'Заполняем массив символами |
Next i |
|
For i = 1 To k – 1 |
'Сортируем массив символов |
m% = i |
|
For j% = i + 1 To k |
|
If a(j) < a(m) Then m = j |
|
Next j |
|

If m<>I then |
n = a(m) : |
a(m) = a(i) : |
a(i) = n |
'перестановка |
Next i |
|
|
|
|
st = st + Join(a, "") + vbCrLf |
'Формируем выходную строку |
Loop Text2 = st Close
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Command1_Click() 'Читаем файл
Dim s As String, st As String
Open "C:\Массивы.txt" For Input As 1 Do While Not EOF(1)
Line Input #1, s
st = st & s & vbCrLf Loop
Text1 = st Close
End Sub
Private Sub Form_Load()
Caption="Работа с текстовыми файлами"
End Sub
Рис.40
Если требуется прочитать сразу весь файл (не превышающий размер 32767 байт) и поместить его в текстовое поле или строку, то иногда проще воспользоваться функцией:
Input(<Число>, <ДФ>)