ГлавнаяСтатьиLua → string.upper, string.lower кириллического текста в lua
string.upper, string.lower кириллического текста в lua E-mail
User Rating: / 0
PoorBest 
Written by xternalx   
Saturday, 21 November 2009 18:17

Ни для кого не секрет, что string.upper И string.lower в их изначальном виде не способны преобразовывать кириллический текст. Однажды мне понадобилось производить такие манипуляции с текстом и я решил написать свой небольшой велосипед

_xtr.cyrlow = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"}
_xtr.cyrupper = {"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я"}
_xtr.strlow = string.lower
_xtr.strupper = string.upper

function string.lower(ciskee)
    local tempciskee = _xtr.strlow(ciskee)
    local tempciskee2 = ''
    local hit = false
    for i = 1,string.len(tempciskee) do
        for j = 1,#_xtr.cyrupper do
            if string.sub(tempciskee,i,i) == _xtr.cyrupper[j] then
                tempciskee2 = tempciskee2.._xtr.cyrlow[j]
                hit = true
                break
            end
        end
        if hit ~= true then
            tempciskee2 = tempciskee2..string.sub(tempciskee,i,i)
            hit = false
        end
        hit = false
    end
    return tempciskee2
end

function string.upper(ciskee)
    local tempciskee = _xtr.strupper(ciskee)
    local tempciskee2 = ''
    local hit = false
    for i = 1,string.len(tempciskee) do
        for j = 1,#_xtr.cyrlow do
            if string.sub(tempciskee,i,i) == _xtr.cyrlow[j] then
                tempciskee2 = tempciskee2.._xtr.cyrupper[j]
                hit = true
                break
            end
        end
        if hit ~= true then
            tempciskee2 = tempciskee2..string.sub(tempciskee,i,i)
            hit = false
        end
        hit = false
    end
    return tempciskee2
end

Вначале просто определяем алфавит прописных и строчных букв, далее "сохраняем" исходные функции string.lower, string.upper, ну и в дальнейшем колдуем 2 переопределенные функции. Код писался "на коленке" около года назад, поэтому скорее всего он не оптимизирован. Если у Вас есть лучшие идеи - предлагайте :)

Last Updated on Monday, 10 May 2010 13:42
 

Add comment


Security code
Refresh