Преобразование русских символов «АВСЕНКМОРТХ» в латинские «ABCEHKMOPTX»

6 5

 

Нередко попадаются символы кириллицы вперемешку с латинскими символами, например в имени файла S000.ВEL.10UKC.&&&&&.012.DL.WD0001.txt, что может приводить к некорректной работе, например:

Необходимо получить подстроки имени файла через разделитель «.» и заполнить ими справочные реквизиты КЭД. Если не выполнить преобразование то реквизит не заполнится, т.к. в справочнике символов кириллицы нет.

Для преобразования разработана простенькая функция (код функции):

 

  Result = ""
  if Assigned(String)
    RUS = "АВСЕНКМОРТХ"
    LAT = "ABCEHKMOPTX"
    i = 1
     While ДлинаСтр(String) >= i
      СимволДляПровi = Copy(String; i; 1)
      j = 1
         while ДлинаСтр(RUS) >= j
          RUSj = Copy(RUS; j; 1)
            if СимволДляПровi == RUSj
              LATj = Copy(LAT; j; 1)
              String = Replace(String; RUSj; LATj)
            endif
          j=j+1
         endwhile
      i=i+1
     Endwhile
    Result = String
  endif

При необходимости результат можно пропустить через UpperCase() для приведения строки к верхнему регистру.

RusInLat.isx (3,56 Кб)

6
Авторизуйтесь, чтобы оценить материал.
1
Евгений Кочуров

Смущает строка в цикле:  Result = Replace(String; RUSj; LATj)

Т.е. на выходе функции будет результат только самого последнего Replace()?

Николай Родионов

Евгений не смущайтесь, это моя ошибка, поправил.

Мария Макарцева

Пояните пжл, чем функция Transliterate() не устраивает? Вроде бы делает тоже самое - выполняет транслитерацию строки (там есть еще второй параметр для управления результатом). Рискну предположить что работать будет быстрее, все-таки системная.
 

Николай Родионов

При преобразовании «АВСЕEHKМОРТХ» функция Transliterate() вернет «AVSEEHKMORTH».

Мария Макарцева

Действительно. Простите не разглядела суть.

Авторизуйтесь, чтобы написать комментарий