Регистр букв

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Регистр букв

Сообщение $Yastrebov$ » 17.05.2010 (Пн) 18:36

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

Чтоб в коде вызывать что-то вроде GetRegistry("а"), а в модуле висело что-то вроде:

Код: Выделить всё
Public Function GetRegistry(strKey as String) as String
       If .... Then
          GetRegistry = "Big"
       elseif .... Then
          GetRegistry = "Small"
       else
          GetRegistry = "?"
       End if
End Function
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистр букв

Сообщение Хакер » 17.05.2010 (Пн) 18:46

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Re: Регистр букв

Сообщение $Yastrebov$ » 17.05.2010 (Пн) 19:58

Спасибо, то что нужно! Вопрос решен.
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Регистр букв

Сообщение Andrey Fedorov » 20.05.2010 (Чт) 8:12

$Yastrebov$ писал(а):Подскажите, пожалуйста, функцию (встроенную или API), которая бы возвращала регистр проверяемой буквы.
Чтоб в коде вызывать что-то вроде GetRegistry("а"), а в модуле висело что-то вроде:


Код: Выделить всё
Public Function GetRegistry(strKey as String) as String
       If UCase$(strKey) = strKey Then
          GetRegistry = "Big"       ' Все цифры и знаки препинания попадут сюда же
       elseif .... Then
          GetRegistry = "Small"
       End if
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Регистр букв

Сообщение alibek » 20.05.2010 (Чт) 8:41

GetStringType гораздо универсальнее, а пользоваться ею не сложно.
Lasciate ogni speranza, voi ch'entrate.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Re: Регистр букв

Сообщение $Yastrebov$ » 20.05.2010 (Чт) 8:49

Если использовать совет Хакера, то GetStringTypeW возвращает цифровой массив, который соответствует длине букв в слове. В котором все заглавные буквы имеют отличный от строчных цифровой идентификатор. Цифры имеют еще один тип цифрового идентификатора, что позволяет отличить их от букв. А символы попадают под четвертый цифровой идентификатор. Единственное, что имеет одинаковый цифровой идентификатор и для меня было не очень удобно - это символ "$" и символ "\" (символ требующий удержания Shift при наборе на клавиатуре и символ который получается без удержания Shift). Но это исключительно была специфика моей задачи и я решил ее по-другому, а GetStringTypeW полностью справляется с описанной в теме задачей.
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Регистр букв

Сообщение alibek » 20.05.2010 (Чт) 9:26

А ты объявляй аргумент как ByVal Long и передавай указатель на строку.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистр букв

Сообщение Хакер » 20.05.2010 (Чт) 9:34

Какие ещё идентификаторы?

Функция бита выставляет, а не идентификаторы. И проверять надо биты, а не сравнивать с идентификаторами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Re: Регистр букв

Сообщение $Yastrebov$ » 20.05.2010 (Чт) 10:31

У меня задача решена. За наводку спасибо. Не вижу смысла начинать разводить демагогию.
Я проверяю то значение Long, которое возвращает ф-ция в массиве. Биты это или еще что-то мне все равно.
Значение элементов массива имеет тип данных Long, а значит я вправе его назвать цифровым идентификатором (цифровым значением, если угодно). И хочу заметить, что это не противоречит тому, что это может быть битом.
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистр букв

Сообщение Хакер » 20.05.2010 (Чт) 10:33

Бред.

Никто не гарантирует, что в слове не окажется левых лишних установленных битов. Тогда всё твоё сравнение пойдёт к чертям.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Re: Регистр букв

Сообщение $Yastrebov$ » 20.05.2010 (Чт) 10:40

Каким образом? Если каждый элемент массива соответствует каждой букве. А длина слова = длине массива.

Код: Выделить всё
Option Compare Binary
Option Explicit

Public Enum CT_
    CT_CTYPE1 = &H1        ' ctype 1 information
    CT_CTYPE2 = &H2        ' ctype 2 information
    CT_CTYPE3 = &H4        ' ctype 3 information
End Enum

Public Enum CharTypes
    C1_UPPER = &H1         ' upper case
    C1_LOWER = &H2         ' lower case
    C1_DIGIT = &H4         ' decimal digits
    C1_SPACE = &H8         ' spacing characters
    C1_PUNCT = &H10        ' punctuation characters
    C1_CNTRL = &H20        ' control characters
    C1_BLANK = &H40        ' blank characters
    C1_XDIGIT = &H80       ' other digits
    C1_ALPHA = &H100       ' any linguistic character
   
    C2_LEFTTORIGHT = &H1    ' left to right
    C2_RIGHTTOLEFT = &H2    ' right to left
   
    C2_EUROPENUMBER = &H3    ' European number, digit
    C2_EUROPESEPARATOR = &H4    ' European numeric separator
    C2_EUROPETERMINATOR = &H5    ' European numeric terminator
    C2_ARABICNUMBER = &H6    ' Arabic number
    C2_COMMONSEPARATOR = &H7    ' common numeric separator

    C2_BLOCKSEPARATOR = &H8    ' block separator
    C2_SEGMENTSEPARATOR = &H9    ' segment separator
    C2_WHITESPACE = &HA    ' white space
    C2_OTHERNEUTRAL = &HB    ' other neutrals

    C2_NOTAPPLICABLE = &H0    ' no implicit directionality

    C3_NONSPACING = &H1    ' nonspacing character
    C3_DIACRITIC = &H2     ' diacritic mark
    C3_VOWELMARK = &H4     ' vowel mark
    C3_SYMBOL = &H8        ' symbols

    C3_KATAKANA = &H10     ' katakana character
    C3_HIRAGANA = &H20     ' hiragana character
    C3_HALFWIDTH = &H40    ' half width character
    C3_FULLWIDTH = &H80    ' full width character
    C3_IDEOGRAPH = &H100    ' ideographic character
    C3_KASHIDA = &H200     ' Arabic kashida character
    C3_LEXICAL = &H400     ' lexical character

    C3_ALPHA = &H8000      ' any linguistic char (C1_ALPHA)

    C3_NOTAPPLICABLE = &H0    ' ctype 3 is not applicable
End Enum


Private Declare Function GetStringTypeW Lib "Kernel32" ( _
ByVal dwInfoType As Long, _
ByVal lpSrcStr As Long, _
ByVal cchSrc As Long, _
lpCharType As Integer _
) As Long

Public Function TypeOfString(st As String, Optional InfoType As CT_ = CT_CTYPE1) As Integer()
    Dim rgchtype() As Integer
    Dim retval As Long
   
    ReDim rgchtype(1 To Len(st))
    retval = GetStringTypeW(InfoType, StrPtr(st), Len(st), rgchtype(1))

    TypeOfString = rgchtype()
End Function


Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Регистр букв

Сообщение Хакер » 20.05.2010 (Чт) 10:51

Каким образом что?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 32

    TopList