Что нового

Замена латинских символов на кириллические в строке

op_joke

Новичок
Сообщения
20
Репутация
0
Здравствуйте,
Что то я уперся в стенку, или что называется - "глаз замылился".

Предыстория: Есть одна американская программа, которая оставляет логи, эти логи я и обрабатываю. На текущем этапе нужно поменять названия месяцев на их порядковые номера. И всё достаточно просто реализуемо - составил массив соответствия названий - номерам, нахожу текст, ищу в массиве, подставляю номер. В результате работы начал получать ошибку, о том что "такое значение в массиве не найдено". А всё это из-за кривой локализации на наш великий и могучий, как оказалось, некоторые символы в словах - латинские.

Вот пример - "декабрь" и "дeкaбpь". Думаете это два одинаковых слова? А вот и нет, во втором слове буквы - "e a p" - буржуйские. При этом, латинской может быть любая из букв, или ни одной.

Проанализировал текст, иногда подтверждая сомнения примером из справки:

Код:
$sInput = 'дeкaбpь'
$sOutput = StringRegExpReplace($sInput, "[opakxce]", "-")
MsgBox(0, "Результат до и после", $sInput & @LF & $sOutput)


выявил все схожие буквы:
Код:
Dim $aArrEn = ["o", "p", "a", "k", "x", "c", "e"]
Dim $aArrRus = ["о", "р", "а", "к", "х", "с", "е"]


И теперь перепните меня пожалуйста через стеночку - подскажите как эти буквы заменить.
Спасибо.
 
Автор
O

op_joke

Новичок
Сообщения
20
Репутация
0
О, похоже отпустило, нашел решение:

Код:
$sResult = _StringReplaceLCh("дeкaбpь")
ConsoleWrite($sResult & @CRLF)

Func _StringReplaceLCh($sString)
 Local $Pattern[7][2] = [["o", "о"], ["p", "р"], ["a", "а"], ["k", "к"], ["x", "х"], ["c", "с"], ["e", "е"]]
 For $i = 0 To UBound($Pattern)-1
  $sString = StringRegExpReplace($sString, $Pattern[$i][0], $Pattern[$i][1])
 Next
 Return $sString
EndFunc

;и проверим на всякий:
$sOutput = StringRegExpReplace($sResult, "[opakxce]", "-")
MsgBox(0, "Результат до и после", $sResult & @LF & $sOutput)
 
Верх