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

       

Символы (Char) Методы структуры Char


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

В первом приближении можно считать, что символ – это строка длины 1. Объявим для примера две переменные:

        Dim s As String = "Ш"

        Dim c As Char = "Ш"

В большинстве случаев вследствие неявного преобразования типов эти две переменные ведут себя одинаково.

Методы структуры Char. В пространстве имен System имеется структура Char, обладающая рядом полезных методов для работы с символами. О них я уже говорил в 14.3.1. Сейчас просто повторюсь:

        Dim Символ As Char = "Ж"

        Debug.WriteLine("Набран символ                                         " & Символ)

        Debug.WriteLine("Это цифра?                                              " & Char.IsDigit(Символ))

        Debug.WriteLine("Это буква?                                                " & Char.IsLetter(Символ))

        Debug.WriteLine("Правда ли, что это буква или цифра?   " & Char.IsLetterOrDigit(Символ))

        Debug.WriteLine("Это строчная буква?                               " & Char.IsLower(Символ))

        Debug.WriteLine("Это заглавная буква?                             " & Char.IsUpper(Символ))

        Debug.WriteLine("Это знак препинания?                             " & Char.IsPunctuation(Символ))

        Debug.WriteLine("Это пробел?                                             " & Char.IsSeparator(Символ))

        Debug.WriteLine("Превратить в строчную                           " & Char.ToLower(Символ))

        Debug.WriteLine("Превратить в заглавную                         " & Char.ToUpper(Символ))

Вот что напечатает этот фрагмент:

Набран символ                         Ж

Это цифра?                            False


Это буква?                            True

Правда ли, что это буква или цифра?   True

Это строчная буква?                   False

Это заглавная буква?                  True

Это знак препинания?                  False

Это пробел?                           False

Превратить в строчную                 ж

Превратить в заглавную                Ж

Unicode символы. Переменная типа Char нынче занимает в памяти 2 байта, и поэтому в современной Windows насчитывается 65536 символов. Это так называемые Unicode символы. Они пронумерованы от 0 до 65535. Порядковый номер любого Unicode символа нам сообщает функция AscW модуля Strings. Функция же ChrW этого модуля наоборот – по номеру сообщает символ:

Функция

Результат

Пояснение

AscW ("Ш")

1064

Буква Ш имеет номер 1064

ChrW (1064)

Ш

Номер 1064 соответствует букве Ш

Вот процедура, распечатывающая символы с 0-го по 1200-й, при этом по 64 символа в строку печати:

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

        Dim Код As Long

        Dim Символ As Char

        For Код = 0 To 1200

            Символ = ChrW(Код)

            Debug.Write(Символ)

            If Код Mod 64 = 0 Then Debug.WriteLine("")

        Next

End Sub

Вот некоторые фрагменты из того, что будет распечатано этой процедурой:

!"#$%&'()*+,-./0123456789:;<=>?@

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

{|}~¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿À

ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿA



????????????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????????

ЁЂЃЄЅІЇЈЉЊЋЌ?ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопр

стуфхцчшщъыьэюя?ёђѓєѕі

Вы видите здесь все цифры, знаки препинания, заглавные и строчные буквы латинского, греческого и русского алфавитов. А также видоизмененные латинские буквы для алфавитов некоторых стран Европы и мира. Если вы заберетесь дальше 1200-го символа, то увидите и арабскую вязь, и иероглифы, и другие алфавиты, и просто популярные значки:

? ? ? ? ?  ?????????? ? ? ? ? ? ? ? ? ? ?

????????????????????   ?????????????????????????????????

?OO0???+?>?????????????????????????????

?????????????????????????????????????????

????????????? ¦??¦?¦¦???dd????

ASCII символы. Раньше переменная типа Char занимала в памяти 1 байт, и поэтому символов насчитывалось только 256. Они были сведены в так называемую ASCII-таблицу. Поскольку в нее нельзя было втиснуть все языки мира, то для разных стран символы таблицы со 128 по 255 могли быть разные. И сегодня мы можем по-старинке пользоваться ASCII-таблицей. В этом нам помогут две функции. Порядковый номер любого символа в  ASCII-таблице нам сообщает функция Asc модуля Strings. Функция же Chr этого модуля наоборот – по номеру сообщает символ:

Функция

Результат

Пояснение

Asc ("Ы")

219

Буква Ы имеет номер 219

Chr (219)

Ы

Номер 219 соответствует букве Ы

Вот процедура, распечатывающая символы с 32-го по 255-й:

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

        Dim Код As Long

        For Код = 32 To 255

            Debug.Write(Chr(Код))

        Next

End Sub

Вот что будет распечатано этой процедурой:

!"#$%&'()*+,-./0123456789:;<=>?@

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕї

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя

Как видите, русские буквы (кириллица) расположены здесь совсем под другими номерами, чем в ипостаси Unicode символов.


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