Можно ли проверить "С" кириллическая или латинская

Программирование на Visual Basic for Applications
erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Можно ли проверить "С" кириллическая или латинская

Сообщение erzhavin » 13.07.2005 (Ср) 11:31

Собственно вот и вопрос. В VIN кодах машин очень часто люди пишут некоторые буквы кириллицей, что не есть хорошо! Не проходят загрузки! Можно ли проверить - есть ли в строке кириллические буквы? Спасибо.

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

Сообщение alibek » 13.07.2005 (Ср) 11:33

Что за VIN коды?
Проверить можно, глянув ASCII-код символа.
Lasciate ogni speranza, voi ch'entrate.

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 13.07.2005 (Ср) 12:21

VIN коды проданных автомобилей. К примеру: JN1АBNT30U001921. Буква "А" в этой строке русская! А должна быть латинская! То есть такое может быть в любом VIN коде, в любом месте!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.07.2005 (Ср) 12:29

А что, функцию Asc мы типа в школе не проходили?

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 13.07.2005 (Ср) 12:44

Нет, не проходилии-и-и. :oops: У меня "3" было по информатике в школе...

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

Сообщение alibek » 13.07.2005 (Ср) 12:53

Код: Выделить всё
Function No7bit(ByVal Value As String) As Boolean
Dim I As Long
For I = Len(Value) To 1 Step -1
  If Asc(Mid$(Value, I, 1)) > 127 Then Exit For
Next I
No7bit = (I > 0)
Lasciate ogni speranza, voi ch'entrate.

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 13.07.2005 (Ср) 14:20

Я сделал так, глядя на Ваши советы!

Код: Выделить всё
For i = 1 To Len(VINstring)
            ch = Mid(VINstring, i, 1)
            If Asc(ch) > 128 Then
            Reply = MsgBox("Бля, неужели аккуратно нельзя вводить данные? Отметить Неправильный VIN красным цветом?", vbYesNo Or vbCritical)
            Red = True ' Типа, давай отметим!
            End If
            Next

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 21.07.2005 (Чт) 9:25

Вот готовая функция, возвращает строку с подмененными заглавными символами кирилицы на заглавные латинские

Function КирЛат(VINstring)
For I = 1 To Len(VINstring)
ch = Mid(VINstring, I, 1)
If Asc(ch) > 191 And Asc(ch) < 256 Then

Select Case Asc(ch)

Case 192
ch = 65
Case 194
ch = 66
Case 209
ch = 67
Case 205
ch = 72
Case 202
ch = 75
Case 204
ch = 77
Case 206
ch = 79
Case 208
ch = 80
Case 210
ch = 84
Case 213
ch = 88
End Select

If I = 1 Then VINstring = Chr(ch) & Right(VINstring, Len(VINstring) - I)
If I <> 1 And I <> Len(VINstring) Then VINstring = Left(VINstring, I - 1) & Chr(ch) & Right(VINstring, Len(VINstring) - I)
If I = Len(VINstring) Then VINstring = Left(VINstring, I - 1) & Chr(ch)
End If
Next
КирЛат = VINstring
End Function

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 21.07.2005 (Чт) 9:31

Отобранные коды, для тех кто хочет дальше попарится дальше

a 97 A 65
b 98 B 66
c 99 C 67
h 104 H 72
k 107 K 75
m 109 M 77
o 111 O 79
p 112 P 80
t 116 T 84
x 120 X 88


а 224 А 192
в 226 В 194
с 241 С 209
н 237 Н 205
к 234 К 202
м 236 М 204
о 238 О 206
р 240 Р 208
т 242 Т 210
х 245 Х 213

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.07.2005 (Чт) 10:17

Попариться, паимаишь...

Код: Выделить всё
Function КирЛат(VINstring as string) as string
  const rus as string = "авснкмортх"
  const lat as string = "ABCHKMOPTX"
  dim i as long, t as long
 
  КирЛат=vinstring
  for i=1 to len(vinstring)
    t=instr(1,rus,mid$(vinstring,i,1),vbtextcompare)
    if t then mid$(КирЛат,i,1)=mid$(lat,i,1)
  next
end function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 21.07.2005 (Чт) 11:09

GSerg
Гениально!!!
не надо рыться в кодах!
Две "паралельные" строки "данных"
но только посмотри на результат

нкмо ABCH
всн ABC
ортх ABCH

сыроватая функция
А идейкой твоей (по истине гениальной) воспользуюсь и доработаю!

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 21.07.2005 (Чт) 11:21

Нашел ошибку, правильно так

Function КирЛат(VINstring as string) as string
const rus as string = "авснкмортх"
const lat as string = "ABCHKMOPTX"
dim i as long, t as long

КирЛат=vinstring
for i=1 to len(vinstring)
t=instr(1,rus,mid$(vinstring,i,1),vbtextcompare)
if t then mid$(КирЛат,i,1)=mid$(lat,t,1) 'тута была "=mid$(lat,t,1)", вместо i - t
next
end function

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.07.2005 (Чт) 11:38

Угу...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList