Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABVB10.doc
Скачиваний:
33
Добавлен:
16.03.2016
Размер:
704 Кб
Скачать

Последовательные файлы

При работе с текстовыми файлами применяется последовательный доступ. При чтении и записи последовательных файлов каждая строка обрабатывается отдельно в той очередности, как она расположена в файле, либо образуется в результате работы программы. Строка от строки отделяется двумя символами <CR> (carriage return – возврат каретки) и <LF> (Line Feod - перевод строки), имеющими соответственно ASCII – коды 10 и 13, комбинации этих кодов соответствует константа vbCRLF.

Запись в файл осуществляется с помощью функций Print(), PrintLine(), Write(),WriteLine.

Синтаксис функций.

Print(<номер файла>,<список вывода>);

PrintLine(<номер файла>,<записи и разделители, отделяемые запятыми>) ;

Write(<номер файла>,< список вывода >);

WriteLine(<номер файла>,<записи и разделители, отделяемые запятыми>).

Функция Print() предоставляет больше возможностей для форматирования информации

Список вывода в операторе Print может содержать две специальные функции.

Функция Spc() позволяет вставить определенное количество пробелов между соседними полями данных:

Print (2, Var1, Spc(5),Var2)

Функция Tab позволяет определять позицию для вывода следующего элемента:

Print (2, Var1, Tab(20), Var2 )

Если элементы функции Print()разделяются запятыми, то запись в файл производится в зонном формате (длина каждой зоны 14 символов), если для разделения используется точка с запятой, то запись происходит слитно, без пробелов. Выведенная в файл строка дополняется символами возврата каретки и перевода строки, но только в том случае, когда в конце списка вывода не ставится запятая или точка с запятой.

Функция Write() более удобна для вывода в файлы, которые впоследствии будут читаться функциейя Input(), поскольку она автоматически разделяет элементы данных запятыми и заключает строки в кавычки.

Список вывода функции Write() это список вычисляемых выражений, в частности переменных или литеральных значений, которые должны быть сохранены в файле. Если в списке несколько элементов, они должны быть разделены запятыми, пробелами или точкой с запятой. После того как оператор Write доходит до конца списка, в файл автоматически записывается символ перехода на новую строку и дальнейшая запись будет происходить с новой строки. Если список вывода отсутствует, то в файл записывается пустая строка.

Чтение из файла осуществляется с помощью функций Input(), LineInput().

Синтаксис функций.

Input(<номер файла>, <переменная>), переменной присваивается значение, читаемое из файла (нельзя читать в элемент управления).

LineInput(<номер файла>), осуществляется чтение из файла с указанным номером последовательности символов, начиная с текущей позиции указателя файла до символа конца строки. Считанная последовательность символов присваивается затем переменной типа String.

S= LineInput(3).

С помощью оператора LineInput можно последовательно (строка за строкой) прочитать весь файл.

При чтении всего файла необходимо определить конец файла. Для этог существует функция EOF (End Of File) –конец файла. Если все данные из файла считаны, функция возвращает значение True.

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

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim st, st1 As String

Dim i As Integer

Dim FileNumber As Integer

For i = 1 To 4

FileNumber = FreeFile()

FileOpen(FileNumber, "c:\Projects\Proba " & i & ".txt", OpenMode.Output)

Next

st = InputBox("Введите запись")

For i = 1 To 3

st1 = st & " " & i & " " & vbCrLf

Print(1, st1)

Print(1, i)

Write(2, st1)

Write(2, i)

PrintLine(3, st1)

PrintLine(3, i)

WriteLine(4, st1)

WriteLine(4, i)

Next

FileClose() 'закрывается файл с указанным номером (все файлы)

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim st As String = ""

Dim st1 As String = ""

Dim i As Integer

Dim FileNumber As Integer

Dim a As String = ""

For i = 1 To 4

FileNumber = FreeFile()

FileOpen(FileNumber, "c:\Projects\Proba " & i & ".txt", OpenMode.Input) 'открыть файл для записи

Do While Not EOF(FileNumber)

Input(FileNumber, a)

TextBox1.Text = TextBox1.Text & a & vbCrLf

Loop

TextBox1.Text = TextBox1.Text & "_________________" & vbCrLf

TextBox1.Text = TextBox1.Text & vbCrLf

FileClose(FileNumber)

FileOpen(FileNumber, "c:\Projects\Proba " & i & ".txt", OpenMode.Input) 'открыть файл для записи

Do While Not EOF(FileNumber)

a = LineInput(FileNumber)

TextBox2.Text = TextBox2.Text & a & vbCrLf

Loop

TextBox2.Text = TextBox2.Text & "_________________" & vbCrLf

TextBox2.Text = TextBox2.Text & vbCrLf

FileClose(FileNumber)

Next

End Sub

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

Форматирование текста осуществляется функцией Print(), в этом случае вывод из файла – с помощью функции LineInput().

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim st, st1 As String

Dim i As Integer = 0

FileOpen(5, "C:\Projects\NP\MyFileWr.txt", OpenMode.Output) 'открыть файл для записи

FileOpen(6, "C:\Projects\NP\MyFilePr.txt", OpenMode.Output) 'открыть файл для записи

st = InputBox("ФАМИЛИЯ, ИНИЦИАЛЫ?")

Do While (st <> "")

i = i + 1

st1 = i & " " & i

Write(5, st, i, st1)

Print(6, TAB(20), st, TAB(50), i, SPC(5), st1)

st = InputBox("ФАМИЛИЯ, ИНИЦИАЛЫ?")

Loop

FileClose(5)

FileClose(6)

End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

Dim a As String = ""

Dim c As String = ""

Dim b As Integer

FileOpen(5, "C:\Projects\NP\MyFileWr.txt", OpenMode.Input) 'открыть файл для чтения

FileOpen(6, "C:\Projects\NP\MyFilePr.txt", OpenMode.Input) 'открыть файл для чтения

Do While Not EOF(5)

Input(5, a)

Input(5, b)

Input(5, c)

TextBox1.Text = TextBox1.Text & a & vbCrLf

TextBox2.Text = TextBox2.Text & b & vbCrLf

TextBox3.Text = TextBox3.Text & c & vbCrLf

Loop

Do While Not EOF(6)

a = LineInput(6)

TextBox4.Text = TextBox4.Text & a & vbCrLf

Loop

FileClose(5)

FileClose(6)

End Sub

2. Чтение заданного количества символов. Для чтения из файла заданного количества символов (или всего файла) используется функция Input, которая осуществляет чтение, начиная с текущей позиции указателя (первой после последнего прочитанного символа). Функция Input читает и хранит в переменной все встретившиеся символы, включая пробелы, символы конца строки и т.д.

Input(<количество символов>,<номер файла>)

При чтении всего файла количество символов в нем можно определить с помощью функции LOF (Length Of File) – длина файла. Эта фунция определяет количество символов (байтов) в файле. При обращении к функции в качестве аргумента указывается номер файла, длину которого необходимо определить.

Пример использования функции Input.

Open FileName For Input As # 1

NumChars = LOF(1)

If NumChars > 32000 Then

MsgBox “ слишком длинная строка”

Exit Sub

End If

MyText.Text = Input(NumChars, # 1)

Close # 1

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

3. Чтение нескольких переменных. Для чтения одним оператором данных в несколько переменных используется оператор Input #. Рассмотренные выше операторы осуществляют чтение только в некоторую строковую переменную, которая используется далее для передачи данных тем переменным, которые участвуют в обработке этих данных. Оператор Input # позволяет читать информацию непосредственно в нужные переменные. Данные, читаемые из файла с помощью оператора Input #, должны быть разделены запятыми или находиться в различных строках. Оператор имеет вид

Input # <номер файла>,<список переменных>,

например,

Input #1, x, y,z

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

Пример чтения данных из файла в массив с помощью оператора Input #.

Dim ThisArray(1 To 10)

For I = 1 To 10

Input #1, ThisArray(I)

Next I

Запись информации в файл. В VB имеется два оператора для записи информации в последовательный файл: Write и Print. Оператор Print предоставляет больше возможностей для форматирования информации, оператор Write более удобен для вывода в файлы, которые впоследствии будут читаться оператором Input #, поскольку он автоматически разделяет элементы данных запятыми и заключает строки в кавычки.

Синтаксис оператора Write:

Write #<номер файла>, [<список вывода>]

номер файла – номер файла, открытого с помощью оператора Open в режиме Output,

список вывода – список вычисляемых выражений, в частности переменных или литеральных значений, которые должны быть сохранены в файле. Если в списке несколько элементов, они должны быть разделены запятыми, пробелами или точкой с запятой. После того как оператор Write доходит до конца списка, в файл автоматически записывается символ перехода на новую строку и дальнейшая запись будет происходить с новой строки. Если список вывода отсутствует, то в файл записывается пустая строка.

Синтаксис оператора Print:

Print # <номер файла>. <список вывода>

Список вывода в операторе Print может содержать две специальные функции.

Функция Spc позволяет вставить определенное количество пробелов между соседними полями данных:

Print #2, Var1; Spc(5); Var2

Функция Tab позволяет определять позицию для вывода следующего элемента:

Print #2, Var1; Tab(20); Var2

Если элементы оператора разделяются запятыми, то запись в файл производится в зонном формате (длина каждой зоны 14 символов), если для разделения используется точка с запятой, то запись происходит слитно, без пробелов. Выведенная в файл строка дополняется символами возврата каретки и перевода строки, но только в том случае, когда в конце списка вывода не ставится запятая или точка с запятой.

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