cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход

 
 
  ГлавнаяСправкаПоискВход  
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать
Написать алгоритм (Прочитано 4 387 раз)
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Написать алгоритм
08.07.2011 :: 11:17:36
 
Есть запись такого рода:
Нкммучф мптъюл 8054 ыпъю

Фактически она обозначает:
Русский солдат 1945 года

Каким образом с помощью инструментария Cronos можно поменять соответствующие буквы (цифры) и автоматически исправить текст (заменить букву Н на Р и т.д.)???
Пробовал методом перебора:
Код:
@info1 := SWAP (@info, "а", "ю");
@info2 := SWAP (@info1, "б", "э");
@info3 := SWAP (@info2, "в", "ь");
@info4 := SWAP (@info3, "г", "ы");
@info5 := SWAP (@info4, "д", "ъ");
@info6 := SWAP (@info5, "е", "щ");
@info7 := SWAP (@info6, "ё", "ш");
@info8 := SWAP (@info7, "ж", "ч"); и т.д. 


Ничего не получилось. Формула сначала поменяла Н на Р, а потом обратно Р на Н.

Нужна функция, подобная
SWAP()
, только пакетного типа. Или функция, похожая на
LATRUS()
, которая заменяет все идентичные по написанию латинские буквы на русские.
Наверх
 
 
IP записан
 
Freelancer
Разработчик
Вне Форума


Per aspera ad Astra

Сообщений: 235
Re: Написать алгоритм
Ответ #1 - 08.07.2011 :: 11:50:22
 
Сделайте посимвольный перевод строки.  Примерно вот так:

@coded := "Нкмучфмптъюлыпъю8054 " //Все кодированные символы
@normal := "Рускийсолдатгода1945 "   //Все декодированные символы

Код:
@strsrc := "Нкммучф мптъюл 8054 ыпъю" //Строка для перевода
@strdst := "" //Переведенная строка

@cnt := 1
@len := len(@strsrc)

while @cnt <= @len do (
	@strdst <<= substr(@normal, index(@coded, substr(@strsrc, @cnt, 1), 1), 1)
	@cnt := @cnt + 1
) 



Наверх
 
 
IP записан
 
Sinilga
Профи
****
Вне Форума


«Главное - улыбка, а остальное
- по инструкции»

Сообщений: 141
Re: Написать алгоритм
Ответ #2 - 08.07.2011 :: 17:46:21
 
Или так:
Код:
@strsrc := "Нкммучф мптъюл 8054 ыпъю"
@ret:=convert(@strsrc,"Нкмучфптъюл8054ы","Рускийолдат1945г") 

Наверх
 
WWW  
IP записан
 
w0rm
Профи
****
Вне Форума



Сообщений: 113
Калуга
Re: Написать алгоритм
Ответ #3 - 10.07.2011 :: 23:57:26
 
Freelancer
, спасибо большое!
Очень элегантная формула!!!

Я лишь немножко изменил её, т.к. мой Кронос "не понял" выражение
<<=
в строке формулы:
@strdst
<<=
substr(@normal, index(@coded, substr(@strsrc, @cnt, 1), 1), 1)



С Вашей помощью получилось следующее:

Код:
@strdst <<= substr(@normal, index(@coded, substr(@strsrc, @cnt, 1), 1), 1)
 


С Вашей помощью получилось следующее:
Код:
@coded := "абвгдеёжзийклмнопрс...; //Кодированные символы
@normal := "юэьыъщшчцхфутсрпо...; //Декодированные символы

@name := КТ2; //Сохраняем значение поля в переменную
@len := len(@name); //Считаем длину строки
@cnt := 1; //Присваиваем значение счётчику

while @cnt <= @len do (
  @name_new := substr(@normal, index(@coded, substr(@name, @cnt, 1), 1), 1);
  APPENDFILE("F:\BD\name.txt",@name_new); //Запись полученных символов в файл
  //Использовал функцию APPENDFILE, т.к. не знал, как собрать в одном поле все полученные символы
  @cnt := @cnt + 1;
)
КТ27 := READFILE("F:\BD\name.txt"); //Прочитал из файла полученные символы и сохранил их в поле
DELETEFILE("F:\BD\name.txt"); //Удалил файл. Это необходимо, чтобы обработать следующую закодированную запись базы данных 

Наверх
 
 
IP записан
 
Freelancer
Разработчик
Вне Форума


Per aspera ad Astra

Сообщений: 235
Re: Написать алгоритм
Ответ #4 - 11.07.2011 :: 15:14:25
 
Не, так не стоит делать. Для того, чтобы собрать все символы в одно поле, надо написать:

Код:
@strdst := ""

while @cnt <= @len do (
@strdst := @strdst << substr(@normal, index(@coded, substr(@name, @cnt, 1), 1), 1);
@cnt := @cnt + 1;
)

КТ27 := @strdst
 



А в общем,  правильный вариант показал Sinilga.
Наверх
 
 
IP записан
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать