ПОНЯТНО О Visual Basic NET (том 3)

         

Невидимый символ возврата каретки


Вы, наверное, удивитесь, если я скажу, что на самом деле в текстовом файле никаких строк нет. Вся информация в текстовом файле представляет собой одну непрерывную цепочку символов. А как же тогда работают методы ReadLine и WriteLine, которые имеют дело со строками файла? – спросите вы. Давайте разберемся.

Вернемся к 19.2.2Вот как на самом деле будет выглядеть информация в файле после выполнения четырех операторов Запись.WriteLine:

Азия5,2729.03.2005 21:30:0012

Каждое выполнение метода WriteLine записывает в файл не только положенную информацию, но последним символом в конец ее дописывает некий невидимый для нас управляющий символ, который я условно обозначил . Называется он «Перевод строки и возврат каретки» и название свое берет от тех древних времен, когда не было еще никаких мониторов и компьютер печатал информацию на автоматических пишущих машинках. Часто для краткости этот символ зовут просто «Возврат каретки» или «Перевод строки». В некотором смысле он является не одним, а парой символов: «Перевод строки» и «Возврат каретки», но мы не будем вдаваться в эти подробности. Для нас это – один символ.

Каждое выполнение метода ReadLine считывает информацию из файла до следующего символа возврата каретки, но сам этот символ не считывается. Таким образом, путаницы с методами ReadLine и WriteLine не получается и все идет нормально.

Метод Write, в отличие от метода WriteLine, символ возврата каретки не дописывает.

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

Разместите на форме текстовое поле. Сделайте его многострочным (см. 3.4.2). При условии, что в файле Filimon.txt содержится описанная выше информация, запустите следующую учебную процедуру:

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


        Dim Чтение As New System.IO.StreamReader("E:\VB\Filimon.txt")

        Dim Строка, s As String

        Строка = Чтение.ReadLine



        s = Чтение.ReadToEnd

        Чтение.Close()

        TextBox1.Text = s

        Debug.WriteLine(s)

End Sub

Пояснения: Переменная Строка получает после выполнения оператора

        Строка = Чтение.ReadLine

значение "Азия”.

Переменная s  имеет строковый тип и поэтому получает после выполнения оператора

        s = Чтение.ReadToEnd

строковое значение оставшейся части файла:

5,27¶29.03.2005 21:30:00¶12¶

Как видите, в состав этой строки входят 3 символа возврата каретки.

Следующие два оператора

        TextBox1.Text = s

        Debug.WriteLine(s)

выводят эту строку в текстовое поле и в окно Output.

Вот как будет выглядеть окно Output:

5,27

29.03.2005 21:30:00

12

Точно так же будет выглядеть и текстовое поле.

Впечатление такое, как будто выводилась не одна строка, а три. Но выводилась все-таки одна строка. Просто компьютерный механизм вывода текстовой информации в текстовое поле, в окно Output и другие объекты таков, что

если в выводимой текстовой информации встречается символ возврата каретки, то вывод оставшейся части этой информации продолжается с новой строки.

А нам кажется, что строк было три.

Мы показали, что символ возврата каретки – это управляющий символ.

Вы можете при желании принудительно вставлять символы возврата каретки в текстовую строку. Ну, прежде всего, вы непроизвольно делаете это каждый раз, когда при вводе текста в текстовое поле нажимаете клавишу Enter. В этом случае вы вставляете символ возврата каретки в текстовую строку, являющуюся свойством Text текстового поля.

Символ возврата каретки является также значением константы vbNewLine из модуля Constants, входящего в пространство имен Microsoft.VisualBasic. Вы можете написать так:

        Dim s1 As String = "Азия"  &  vbNewLine  &  "Европа"

        TextBox1.Text = s1

        Dim s2 As String = "Пас"  &  vbNewLine  &  "Гол"  &  vbNewLine

 &  "Дисквалификация"

        Label1.Text = s2

Результат выполнения этого фрагмента вы видите на Рис. 19.1.



Рис. 19.1

Обратите внимание, что нам было бы трудно другими средствами заставить данный конкретный текст метки выводится так, как на рисунке – по одному слову в строке.

Значение константы vbNewLine является комбинацией пары символов с номерами 13 и 10 в таблице ASCII. Поэтому можно было написать и так:

        TextBox1.Text = "Азия"  &  Chr(13) & Chr(10)  &  "Европа"


Содержание раздела