ПОНЯТНО О 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)  &  "Европа"


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