транслит

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

транслит

Сообщение i'm pissed » 28.10.2004 (Чт) 19:21

как сделать транслит для combobox
by_pissed

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

Сообщение alibek » 29.10.2004 (Пт) 11:59

А?
Lasciate ogni speranza, voi ch'entrate.

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.10.2004 (Пт) 16:35

ага
че не знаешь че такое транслит
by_pissed

Yojik21
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 27.10.2004 (Ср) 18:58
Откуда: Симферополь, Украина

Сообщение Yojik21 » 29.10.2004 (Пт) 16:47

Поконкретнее бы
C уважением, Yojik21

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.10.2004 (Пт) 17:16

показываю для некоторых
на пример ты пишиш йцукен
у это у тебя переконвектируется в qwerty
by_pissed

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

транслит

Сообщение Prickly » 29.10.2004 (Пт) 17:21

йцукен в транслите будет iycuken, или что-то на подобе. Ты людей не путай.
Не было бы Гейтса, не было бы нас!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.10.2004 (Пт) 17:31

Ручками надо сделать...

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 29.10.2004 (Пт) 20:01

Translit eto ne mnogo ne to chto ti podumal транслит это eto. А то что ты хочиш сделать то я думаю только Select Case

Код: Выделить всё
Select case <<буква>>
Сase <<и вот так весь алфавит>>
sText=<<другой алфавит>>
End Select
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 29.10.2004 (Пт) 23:40

вообщем-то всё просто:)

Собираем функцию
Берем один алфавит записываем его строкой ...
Потом второй алфавит, тоже строкой пишем...
Ориентируешься на раскладку, т.е. Q(LAT) = Й(РУС)


Function Translit(TEXT as string, ToRus as Boolean) as String
RUS = "абвгд...я"
LAT = "f,dul...z"

Translit = ""
For I = 1 to LEn(TEXT)
Simb = Mid(TEXT,I,1)
If ToRus = True then
If instr(1,LAT,lcase(Simb))<>0 then
PP = instr(1,LAT, lcase(Simb))
Translit = Translit + mid(RUS,PP,1)
Else
Translit = Translit + Simb
End if
Else
If instr(1,RUS,lcase(Simb))<>0 then
PP = instr(1,RUS, lcase(Simb))
Translit = Translit + mid(LAT,PP,1)
Else
Translit = Translit + Simb
End if


End if
Next I
End Function
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 30.10.2004 (Сб) 10:52

Не очень оригенальна эта функция, потому что при транслите (с русского) могут быть одна русская буква двумя латинскими, например ш > sh, я > ja, ну и т.п. Легче создать действительно один здоровенький модулек с Select Case'ами, и потом спокойно его добавлять в проект, и юзаться!
On Fatal Error Resume Next

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 30.10.2004 (Сб) 11:19

Это работает по принципу

Привет = ghbdtn

Если нужно произвести транслит в системе
Привет => Privet => Привет ...

То функция требует маленькой модернизации ...
(добавление ещё одноё строки перевода)
плюс функции перевод ... намного легче
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 30.10.2004 (Сб) 11:40

Теперь что касается перевода "Ш" в "SH"
и "SH" в "Ш" операция выполняется достаточно просто при соответсвующем алгоритме, могу Предложить сравнить варианты работы ч/з функцию и Ваш вариант громадный SELECT CASE ... вообщем если согласны - давайте сравним.


Проосто я представил себе транслит слова "шишка"
шишка => shishka
а теперь переведем "shishka" в шишку (посимвольно:))
shishka => схисхка ....
Странно, "схисхка" <> "шишка" ...

Наверно поетому ... все стихи в переводе по цепочке РУС -> НЕРУС -> РУС .. меняется смысл:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 30.10.2004 (Сб) 14:28

На ворме тока 1 кнопка ... Command1 для примера

Код: Выделить всё
'### Правила транслита задайте под себя!!
'### тут они под меня!!!
'### Пакость есть - сочетания букв не должны повторяться
Const RUS = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя"
Const ENG = "abvgdejozhzijklmnoprstufxcchshsch'yi`jejuja"
Const DIG = "111111221111111111111111223121222"

Dim MaxSimbLen As Byte
Dim RusCol As Collection
Dim LatCol As Collection
Dim CSUM As Integer

'### Инициализируем коллекции
Sub InitCollection()
Set RusCol = New Collection
Set LatCol = New Collection
CSUM = 0
MaxSimbLen = 0
For I = 1 To Len(RUS)
  If I > 1 Then CSUM = CSUM + Val(Mid(DIG, I - 1, 1))
  DLEN = Val(Mid(DIG, I, 1))
  If DLEN > MaxSimbLen Then MaxSimbLen = DLEN
  RusCol.Add Mid(RUS, I, 1), Mid(ENG, CSUM + 1, DLEN)
  LatCol.Add Mid(ENG, CSUM + 1, DLEN), Mid(RUS, I, 1)
Next I
End Sub

Function Translit(TEXT As String, ToRus As Boolean) As String
Dim Simb As String, Tmp As String
Translit = ""
For I = 1 To Len(TEXT)
  Simb = LCase(Mid(TEXT, I, 1))
  Select Case ToRus
   Case False  '### В латиницу кодим
    Ind = GetRusSimb(Simb)
    If Ind <> "" Then Translit = Translit + Ind Else Translit = Translit + Simb
   
   Case True   '### В русский кодим
    For C = MaxSimbLen To 1 Step -1
     Tmp = LCase(Mid(TEXT, I, C))
     Ind = GetLatSimb(Tmp)
     If Ind <> "" Then
      Translit = Translit + Ind
      I = I + C - 1
      Exit For
     End If
    Next C
    If Ind = "" Then Translit = Translit + Simb
  End Select
Next I
End Function

Function GetLatSimb(TXT As String) As String
On Error Resume Next
GetLatSimb = ""
GetLatSimb = RusCol(TXT)
End Function

Function GetRusSimb(TXT As String) As String
On Error Resume Next
GetRusSimb = ""
GetRusSimb = LatCol(TXT)
End Function

Private Sub Command1_Click()
Dim A As String, B As String, C As String
A = "На него упала шишка с ёлки."
B = Translit(A, False)
C = Translit(B, True)
MsgBox A & vbCrLf & B & vbCrLf & C
End Sub

Private Sub Form_Load()
InitCollection
End Sub


Результат:
На него упала шишка с ёлки.
na nego upala shishka s jolki.
на него упала шишка с ёлки.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 30.10.2004 (Сб) 19:12

Блин почему файлы не прекрепляются :( :evil:
Хотел свой пример выложить а не получается :cry:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 30.10.2004 (Сб) 20:06

Ручками тогда%)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 30.10.2004 (Сб) 22:12

Щасссс!!!! :lol:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!


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

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

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

    TopList  
cron