[Код] Примеры синтаксиса кода

Описание кода без конкретной привязки

Модераторы: immortal, newz20

kbh72
Сообщения: 10
Зарегистрирован: Сб июн 09, 2018 9:33 pm
Откуда: Архангельск
Благодарил (а): 5 раз
Поблагодарили: 0

Re: Примеры синтаксиса кода

Сообщение kbh72 » Чт июн 14, 2018 4:14 pm

AlexL писал(а):
Чт июн 14, 2018 6:08 am
PAV писал(а):
Пт июн 27, 2014 12:28 pm
Договорились кидать на форум, а в вики я ссылку даю.
http://smartliving.ru/Main/Library
Перенаправление какое то включить бы. Половина ссылок на форуме не работает. :cry:
И правда. Может где то в шапке закрепить.
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Примеры синтаксиса кода

Сообщение ZyaK » Ср авг 22, 2018 11:35 am

Здравствуйте, подскажите пожалуйста для особо одаренных, как на ПХП получить свойства объекта?
есть у меня котёл твердотопливный, который по MQTT шлёт несколько параметров
хочу создать сценарий чтоб алиса рассказывала мне эти параметры, но не понимаю как получить свойства и чтоб она их произнесла :cry:
ткните пожалуйста носом :)
PI2 + MQTT + 5 ESP8266 + Atmega16
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Примеры синтаксиса кода

Сообщение skysilver » Ср авг 22, 2018 11:49 am

ZyaK писал(а):
Ср авг 22, 2018 11:35 am
ткните пожалуйста носом :)
https://kb.smartliving.ru/vstroennie-v- ... o-funkcii/
За это сообщение автора skysilver поблагодарил:
ZyaK (Ср авг 22, 2018 11:57 am)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Примеры синтаксиса кода

Сообщение ZyaK » Ср авг 22, 2018 12:39 pm

получилось как то так, свойства берет по условиям отрабатывает, а как сделать, чтоб говорила по человечи, а то говорит " температура воды тридцати двух градусов, температура масла тридцати одного градуса"
пробовал Say("Включён твердотопливный котел, температура воды " .gg .$Water_actual." градуса", 2);
говорить начинает правильно, но "ГЫ ГЫ" тоже говорит :D

Код: Выделить всё

$obj=getObject($Котел);
$Status=getGlobal('Котел.Status');
if($Status == 1)
{
 $Water_actual=getGlobal('Котел.Water_actual');
 $Oil_actual=getGlobal('Котел.Oil_actual');
 $Pressure=getGlobal('Котел.Pressure');
 Say("Включён твердотопливный котел, температура воды " .$Water_actual." градуса, температура масла " .$Oil_actual. " градуса, давление в рессивере " .$Pressure. " атмосферы" ,  2 );
 
}
else
{
 Say("Твердотопливный котёл выключен",2); 
}
PI2 + MQTT + 5 ESP8266 + Atmega16
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Примеры синтаксиса кода

Сообщение Logrus » Ср авг 22, 2018 1:48 pm

За это сообщение автора Logrus поблагодарили (всего 2):
ZyaK (Ср авг 22, 2018 1:52 pm) • Mr.Lia (Чт авг 23, 2018 9:44 pm)
Рейтинг: 2.33%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: Примеры синтаксиса кода

Сообщение ZyaK » Чт авг 23, 2018 6:42 am

Пробую вот так, вроде более менее, воду говорит нормально тридцать градусов, а на масле говорит тридцати градусов
ну или тридцать один градус, температура масла тридцати одного градуса
:D :D :D

Код: Выделить всё

function myMorph($string, $ch1, $ch2, $ch3)
   {
      $ff=Array('0','1','2','3','4','5','6','7','8','9');
      if(substr($string,-2, 1)==1 AND strlen($string)>1) $ry=array("0 $ch3","1 $ch3","2 $ch3","3 $ch3" ,"4 $ch3","5 $ch3","6 $ch3","7 $ch3","8 $ch3","9 $ch3");
      else $ry=array("0 $ch3","1 $ch1","2 $ch2","3 $ch2","4 $ch2","5 $ch3","6 $ch3","7 $ch3","8 $ch3","9 $ch3");
      $string1=substr($string,0,-1).str_replace($ff, $ry, substr($string,-1,1));

      return $string1;
}
Say("температура ". "воды ".  myMorph($Water_actual, "градус", "градуса", "градусов"). ", температура ". "масла ". myMorph($Oil_actual, "градус", "градуса", "градусов"),2);

PI2 + MQTT + 5 ESP8266 + Atmega16
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Примеры синтаксиса кода

Сообщение Logrus » Пт авг 24, 2018 9:02 pm

тридцати градусов
а на входе в текст ту спич 30 градусов
это проблема речевого движка, и где как по разному с решением, можно и до придумать
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Примеры синтаксиса кода

Сообщение xor » Вс авг 26, 2018 12:13 am

вариант морфа покороче

Код: Выделить всё

/**
 * Склоняем словоформу
 * @ author runcore
 * morph(1000,'градус','градуса','градусов');
 */
function morph($n, $f1, $f2, $f5) {
	$n = abs(intval($n)) % 100;
	if ($n>10 && $n<20) return $f5;
	$n = $n % 10;
	if ($n>1 && $n<5) return $f2;
	if ($n==1) return $f1;
	return $f5;
}
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Примеры синтаксиса кода

Сообщение fandaymon » Вс авг 26, 2018 12:54 am

Самое смешное, что давно уже есть встроенная функция для склонения чисел - GetNumberWord().

GetNumberWord($x,array('день','дня','дней'))
GetNumberWord($x,array('градус','градуса','градусов'))
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Примеры синтаксиса кода

Сообщение xor » Вс авг 26, 2018 12:57 am

ZyaK писал(а):
Чт авг 23, 2018 6:42 am
Пробую вот так, вроде более менее, воду говорит нормально тридцать градусов, а на масле говорит тридцати градусов
ну или тридцать один градус, температура масла тридцати одного градуса
:D :D :D
Обманем движок
Вот функция, переделанная из перевода суммы в рублях в строку (использует morph) -- для целых

Код: Выделить всё

/**
 * Возвращает текст числа с параметром
 * @uses morph(...)
 * $sex - 0 male 1 female
 * use mynum2str(30,'градус','градуса','градусов',0)
 */
function mynum2str($num,$f1, $f2, $f5,$sex) {
	$nul='ноль';
	$ten=array(
		array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),
		array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять'),
	);
	$a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
	$tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто');
	$hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот');
	$unit=array( // Units
		array('' ,'' ,'',$sex),
		array($f1,$f2,$f5,$sex),
		array('тысяча'  ,'тысячи'  ,'тысяч'     ,1),
		array('миллион' ,'миллиона','миллионов' ,0),
		array('миллиард','милиарда','миллиардов',0),
	);
	////////////////////////////////
	if($num<0){ 
          $minus='минус ';
        }else{
          $minus = '';
        }
        $num = abs($num); 
        ////////////////////////////////
	list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num)));
	$out = array();
	if (intval($rub)>0) {
		foreach(str_split($rub,3) as $uk=>$v) { // by 3 symbols
			if (!intval($v)) continue;
			$uk = sizeof($unit)-$uk-1; // unit key
			$gender = $unit[$uk][3];
			list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
			// mega-logic
			$out[] = $hundred[$i1]; # 1xx-9xx
			if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99
			else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
			// units without rub & kop
			if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]);
		} //foreach
	}
	else $out[] = $nul;
	$out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub
	//$out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop
	return $minus.trim(preg_replace('/ {2,}/', ' ', join(' ',$out))); ///////////////////////////////
}
mynum2str(23,'градус','градуса','градусов',0) -> строка двадцать три градуса
////////////////////
обновил для работы с отрицательными числами
Последний раз редактировалось xor Вс авг 26, 2018 1:40 am, всего редактировалось 2 раза.
Ответить