Транслитерация

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimoshka
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 03.08.2005 (Ср) 13:02
Откуда: Харьков

Транслитерация

Сообщение Dimoshka » 08.11.2005 (Вт) 10:04

Помогите пожалуйста. Как перевести в транслит то что введено в textbox. (Програмно имеется ввиду на VB)
Dimoshka

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

Сообщение alibek » 08.11.2005 (Вт) 10:18

Создаешь массив соответствий (типа, A - A, Б - B, Ж - ZH), затем проходишься по строке, по каждому символу, и каждому символу находишь соответствие в массиве соответствий и строишь строку из этих соответствий.
Lasciate ogni speranza, voi ch'entrate.

Dimoshka
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 03.08.2005 (Ср) 13:02
Откуда: Харьков

Сообщение Dimoshka » 08.11.2005 (Вт) 22:42

Спасибо, но немог бы ты написать пример, а то я пока только начинающий в программировании.
Dimoshka

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 08.11.2005 (Вт) 22:49

Можно, ты только напиши массив соответствий в файл в формате:
А A
В W
Ч CH
...
Текстовым документом. ИМХО это самая противная часть.

Dimoshka
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 03.08.2005 (Ср) 13:02
Откуда: Харьков

Сообщение Dimoshka » 09.11.2005 (Ср) 9:45

Извени но я уже нашол пример. Только он чучуть другое делал и поэтому потребовал переработки. И возник вопрос, там присваивается букве русского алфавита 1 английского, а как зделать так чтобы например буква "ч" менялась на "ch"?
Вот код:

Private Sub Convert_Click()
OutputText = ConvertToNormal(InputText)
End Sub

Public Function ConvertToNormal(ByVal InputVal As String) As String
Dim TypeOfConvert As Integer, ConvertionMassive(1 To 2) As String
10: x = x + 1
TypeOfConvert = 0
If Asc(Mid(InputVal, x, 1)) > 58 And Asc(Mid(InputVal, x, 1)) < 123 Then TypeOfConvert = 1 Else If Asc(Mid(InputVal, x, 1)) > 128 And Asc(Mid(InputVal, x, 1)) < 243 Then TypeOfConvert = 2
If TypeOfConvert = 0 Then GoTo 10
ConvertionMassive(1) = "ÉÖÓÊÅÍÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ,éöóêåíãøùçõúôûâàïðîëäæýÿ÷ñìèòüáþ.¸1234567890-=\¨!""¹;%:?*()_+/ "
ConvertionMassive(2) = "QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM<>?qwertyuiop[]asdfghjkl;'zxcvbnm,./`1234567890-=\~!@#$%^&*()_+| "
For x = 1 To Len(InputVal)
If TypeOfConvert = 1 Then temp = 2 Else temp = 1
ConvertToNormal = ConvertToNormal & Mid(ConvertionMassive(TypeOfConvert), InStr(1, ConvertionMassive(temp), Mid(InputVal, x, 1)), 1)
Next x
End Function
Dimoshka

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

Сообщение alibek » 09.11.2005 (Ср) 9:47

Таким способом никак.
Вместо двух строк создай два массива, тогда не будешь ограничен в длине токенов.
Lasciate ogni speranza, voi ch'entrate.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 10.11.2005 (Чт) 11:51

Я помню давно писал тоже самое. так что если скажешь как выложить архив, то вылажу.

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Транслитерация

Сообщение AndreyIl » 10.11.2005 (Чт) 14:08

Option Explicit

Private Const RusAlf = "абвгдеёжзийклмнопрстуфхць"
Private Const EngAlf = "abvgdeegziyklmnoprstufhc'"
Private Const RusIskl = "чшюя"
Private Const EngIskl = "chshyuya"

Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim St As String
Dim S As String
St = Text1.Text
For i = 1 To Len(St)
S = Mid(St, i, 1)
If InStr(RusAlf, S) > 0 Then
St = Replace(St, S, Mid(EngAlf, InStr(RusAlf, S), 1))
Else
If InStr(RusIskl, S) > 0 Then
St = Replace(St, S, Mid(EngIskl, InStr(RusIskl, S) * 2 - 1, 2))
End If
End If
Next i
Command1.Caption = St
End Sub

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

Сообщение alibek » 10.11.2005 (Чт) 14:35

Глупо.

Код: Выделить всё
Dim tblRus As String, tblLat() As String, I As Long, res As String
tblRus = "АБВ...ЭЮЯ"
ReDim tblLat(0 To Len(tblRus))
For P = 1 To Len(tblRus)
  tblLat(P) = Choose(P, "A", "B", "V", "G", ... , "YE", "YU", "YA")
Next P
...
res = vbNullString
For I = 1 To Len(sSourceString)
  tblLat(0) = Mid$(sSourceString, 1, 1)
  res = res & tblLat(InStr(tblRus, tblLat(0))
Next I
MsgBox res
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList