Author Topic: [= С НАСТУПАЮЩИМ 2018 НАС, КЛИКЕРМАННЦЫ! =] Вечный календарь  (Read 2698 times)

0 Members and 1 Guest are viewing this topic.

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Прива, чатлане!

Желаю нашему форуму в грядущем году роста аудитории, интересных идей и успешных их реализаций!!!
А Джону Енотовичу -- не менее продуктивного года работы, полную норку добычи и прочих енотских радостей =)



Вот хотел к празднику выкатить скриптец, способный самостоятельно определять день недели на основе текущей/вводимой даты (первый алгоритм отсюда). Уже прописал переменные, записал исходные данные в массивы (по крайней мере, намеревался), дохожу до того места, где пора уже считывать данные..  Ан нет, функция ГетУер захлёбывается, когда подсовываешь ей кавычки:


Подскажите кто-нибудь секрет, как вы организовываете доступ к виртуальным переменным/массивам, которые нужно задать не явно, не напрямую, а к примеру скопом по шаблону. Схожий трабл у меня возникает временами и с другими строковыми функциями (на месте кавычек -- нераспознанные символы). Кстати, впервые сегодня создаю скрипт в 4.13.007 (после перехода с .003).

Собсна, большая часть написана, осталась пара шагов до завершения, и.. вот такой казус)
[spoiler=PerpetualCalendar.cms]
Code: (clickermann) [Select]
// 29.12.2017
#name "Montana"
//nd: DelPoMod,concatArrayFunc,matrixTranspond,varPrn-EdCtx,
logshow(1)
logclear

$dte=$_date_str
if($dte=0)
   $dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
end_if
$dt=strconcat($_date_d,".",$_date_m,".",$_date_y)
//$_time_str
$divdr=strcut(strfilter($_date_str,"0123456789",0),1,1)
//$divdr2=strcut(strfilter($_date_str,"0123456789",0),2,1)
//print("  ",$_date_str,"  ",strlen($_date_str)," ",$divdr," ",$dt)
strseparate($dte,$divdr,$fecha)
//print($fecha[2])
//jfmamjjasond
$jan="1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6"
$feb="4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6,7,1,2"
$mar="4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3"
$avr="7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6"
$may="2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1"
$nio="5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6,7,1,2,4"
$lio="7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6"
$aug="3,4,5,7,1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2"
$sep="6,7,1,3,4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5"
$oct="1,2,3,5,6,7,1,3,4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7"
$nov="4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5,6,7,1,3"
$dec="6,7,1,3,4,5,6,1,2,3,4,6,7,1,2,4,5,6,7,2,3,4,5,7,1,2,3,5"
$mes="jan,feb,mar,avr,may,nio,lio,aug,sep,oct,nov,dec"

//strcut(strfilter(strconcat("$",$meses[$mth]),",",0),$wk,1)
strseparate($mes, ",", $meses)
for($mth=0,$mth<12)
   $mName=$meses[$mth]
   for($wk=0,$wk<28)
      SETVAR (strconcat("$m",$mth+1,"[",$wk,"]"), strcut(strfilter(strconcat("$",$meses[$mth]),",",0),$wk,1))
   end_cyc
end_cyc
//strseparate($jan, ",", $m1)


if(strlen($fecha[2])=2)
   $yr=$fecha[2]+2000
else
   if(strlen($fecha[2])=4)
      if(($fecha[2]>1900)&($fecha[2]<2097))
         $yr=$fecha[2]
      else
         print("Year is out of bounds! (1901-2096) ")
         halt
      end_if
   else
      print("Year must have 2 or 4 digits!")
      halt
   end_if
end_if
$monthy=$fecha[1]
$dy=$fecha[0]

$rest=$yr-1900
$quantor=int($rest/28)
$shift=$rest-(28*$quantor)
print("Rest=",$rest," K=",$quantor," Shift=",$shift)
$row=strconcat("$m",$monthy,"[",$shift-1,"]")
$delta=getvar("$row")
//print(getvar("m12[4]"))
$tmpvar=getvar("$m12[4]")
print(" Tmp=",$tmpvar)
print(" m12[4]=",$m12[4])
print(" Row=",strconcat("m",$monthy,"[",$shift-1,"]")," / ",$row," Delta=",$delta)



halt

 и подстановка в функции SetVar/GetVar с кавычками
[/spoiler]
« Last Edit: December 31, 2017, 04:55:40 PM by Cleoss »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Не думаю, что getvar может работать с массивами. Скорее всего индексы он разбирать не умеет.
Могу и ошибаться, нужно проверять.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Так ты ж ей массивы подсовываешь! С чего ты взял что функция работает с массивами?

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
С НАСТУПАЮЩИМ 2018 НАС, КЛИКЕРМАННЦЫ!
« Reply #3 on: December 31, 2017, 04:36:11 PM »
Немного допилил часики Монтана, но курантов из них пока не вышло)  Вчера она успешно пиликала и показывала день недели и дату, а сегодня пшик и на всех языках показывает одну и ту же абразакодабренную строку (兀dಘe兀d兀d?z).

ЧТо случилось с мои скриптегом?  :'(
[spoiler=Montana.cms]
Даже форум отказывается принимать эту заколдованную строчку   :D  : https://prnt.sc/huiled


Code: (clickermann) [Select]
// 29.12.2017 nd: DelPoMod,concatArrayFunc,matrixTranspond,varPrn-EdCtx,ifPixIn,
#name "Montana" //radio+switch@hlp,
logshow(1)
logclear
$dt=strconcat($_date_d,".",$_date_m,".",$_date_y)
$dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
$dte=$_date_str
//$dte=inputbox("Plz input a date below! (dd.mm.yyyy) ",$dt,60)
$lang=2
$lang=radiobox("Now plz input ur prefered language for date output result: ","1 English","2 Russian","3 French","4 German","5 Spanish","6 Turkish")
//if($dte=0)
//   $dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
//end_if
$divdr=strcut(strfilter($dte,"0123456789",0),1,1)
//$divdr2=strcut(strfilter($_date_str,"0123456789",0),2,1)
strseparate($dte,$divdr,$fecha)
//$mes="jan,feb,mar,avr,may,nio,lio,aug,sep,oct,nov,dec"
$mods="1111111111111111111111111111123467124567234571235671345645672345712356713456123467124561234671245672345712356713712456723457123567134561234623467124567234571235671345615672345712356713456123467124712456723457123567134561234634571235671345612346712456726713456123467124567234571235123567134561234671245672345745612346712456723457123567136713456123467124567234571235"
//strcut(strfilter(strconcat("$",$meses[$mth]),",",0),$wk,1)
//strseparate($mes, ",", $meses)
//strseparate($jan, ",", $m1)
if(strlen($fecha[2])=2)
   $yr=$fecha[2]+2000
else
   if(strlen($fecha[2])=4)
      if(($fecha[2]>1900)&($fecha[2]<2097))
         $yr=$fecha[2]
      else
         print("Year is out of bounds! (1901-2096) ")
         halt
      end_if
   else
      print("Year must have 2 or 4 digits!")
      halt
   end_if
end_if
$monthy=$fecha[1]
$dy=$fecha[0]
$shift=($yr-1900)-(28*(int(($yr-1900)/28)))
$intercalated=0
$leaptx=""
if($shift/4=int($shift/4))
   $intercalated=1
   $leaptx="(Високосный год)"
end_if
$dycode=$dy+(strcut($mods,28*($monthy-0)+($yr-1900)-(28*(int(($yr-1900)/28))),1))
$wkdy=$dycode-int($dycode/7)*7
//print(" day=",$wkdy)
switch($lang)
case(1) // en
   $leaptx="Leap-year"
   $dys="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
   $mzs="January,February,March,April,May,June,July,August,September,October,November,December"
case(2) // ru
   $leaptx="Високосный год"
   $dys="Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье"
   $mzs="января,февраля,марта,апреля,мая,июня,июля,августа,сентября,октября,ноября,декабря"
case(3) // fr
   $leaptx="Annee bissextile"
   $dys="Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche"
   $mzs="janvier,fevrier,mars,avril,mai,juin,juillet,aout,septembre,octobre,novembre,decembre"
case(4) // de
   $leaptx="Schaltjahr"
   $dys="Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag"
   $mzs="Januar,Februar,Marz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
case(5) // es
   $leaptx="Ano bisiesto"
   $dys="Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo"
   $mzs="enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre"
case(6) // tr
   $leaptx="Sicrama"
   $dys="Pazartesi,Sali,Carsamba,Persembe,Cuma,Cumartesi,Pazar"
   $mzs="Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik"
default
   $leaptx="Leap-year"
   $dys="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
   $mzs="January,February,March,April,May,June,July,August,September,October,November,December"
end_switch
strseparate($dys,",",$dyrange)
strseparate($mzs,",",$mzrange)
if($intercalated=0)
   $leaptx=""
else
   $leaptx=strconcat("(",$leaptx,")")
end_if
switch($lang)
case(1) // en
   print(" ",$dyrange[$wkdy-1],", ",$mzrange[$monthy-1]," ",$dy,", ",$yr," ",$leaptx)
case(2) // ru
   print(" ",$dyrange[$wkdy-1],", ",$dy," ",$mzrange[$monthy-1]," ",$yr," года ",$leaptx)
case(3) // fr
   print(" ",$dyrange[$wkdy-1]," ",$dy," ",$mzrange[$monthy-1]," ",$yr," ",$leaptx)
case(4) // de
   print(" ",$dyrange[$wkdy-1],", ",$dy,". ",$mzrange[$monthy-1]," ",$yr," ",$leaptx)
case(5) // es
   print(" ",$dyrange[$wkdy-1],", ",$dy," de ",$mzrange[$monthy-1]," de ",$yr," ",$leaptx)
case(6) // tr
   print(" ",$dy," ",$mzrange[$monthy-1]," ",$yr," ",$dyrange[$wkdy-1]," ",$leaptx)
default
   print(" ",$dyrange[$wkdy-1],", ",$mzrange[$monthy-1]," ",$dy,", ",$yr," ",$leaptx)
end_switch

halt

Sunday, December 31, 2017
Sonntag, 31. Dezember 2017
31 Aral?k 2017 Pazar
Domingo, 31 de diciembre de 2017
Dimanche 31 decembre 2017

[/spoiler]

Надеюсь, мож, у вас буит работать и не глючить.
« Last Edit: December 31, 2017, 04:54:05 PM by Cleoss »

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
С чего ты взял что функция работает с массивами?
Не думаю, что getvar может работать с массивами. Скорее всего индексы он разбирать не умеет.

Печалька, а так бы с виртуальными массивами мона было б натворить чудес!  ::)

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
С 2018 НАС, КЛИКЕРМАННЦЫ! =] Вечный календарь
« Reply #5 on: January 01, 2018, 12:43:36 AM »
Ну вот и наступил 2 о 1 8   = Д
« Last Edit: January 01, 2018, 02:58:06 PM by Cleoss »