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

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(<Число>, <ДФ>)

Соседние файлы в папке Лекции по информатике [Лебедев]