Select case <<буква>>
Сase <<и вот так весь алфавит>>
sText=<<другой алфавит>>
End Select
'### Правила транслита задайте под себя!!
'### тут они под меня!!!
'### Пакость есть - сочетания букв не должны повторяться
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
Сейчас этот форум просматривают: Yandex-бот и гости: 1