Покажи Публикации - axelic
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1]
1  Програмиране / Web development / помощ за perl 2 -: Feb 01, 2007, 23:31
Цитат (axelic @ Фев. 01 2007,14:13)
Здравейте, може ли някой да ми каже как в Perl мога да направя следното:
Имам два файла,
единия не се променя(file1.pl), и в него има да кажем една формула от типа 4 х 3, интересува ме втория(file2.pl), при стартирането на който трябва да излезе въпрос от сорта на на "колко пъти?", и след което да дам бройката първия файл (file1.pl) да се изпълни точно толкова пъти, да се сумира, и да излезе резултата? Примерно давам 2, и резултата би трябвало да бъде (4х3)+(4х3) = 24. Ако дам 3 резулатата да е (4х3)+4х3)+4х3) = 36.

Предварително - много благодаря !!!

п.с. Забравих да спомена - става въпрос за скриптче и работи под UNIX!

Мисля че е малко неясно, затова си изменям въпроса - Perl файл под UNIX се стартира с "perl file1.pl". Какво обаче да е написано в тялото на file1.pl, че той да старира file2.pl ? Опитах с това:

КОД
#!/bin/sh
./file2.pl


и с това:

КОД
#!/bin/sh
perl file2.pl

...е не става... ПОМОЩ!!! : '<img'>
2  Програмиране / Web development / помощ за perl 2 -: Feb 01, 2007, 13:13
Здравейте, може ли някой да ми каже как в Perl мога да направя следното:
Имам два файла,
единия не се променя(file1.pl), и в него има да кажем една формула от типа 4 х 3, интересува ме втория(file2.pl), при стартирането на който трябва да излезе въпрос от сорта на на "колко пъти?", и след което да дам бройката първия файл (file1.pl) да се изпълни точно толкова пъти, да се сумира, и да излезе резултата? Примерно давам 2, и резултата би трябвало да бъде (4х3)+(4х3) = 24. Ако дам 3 резулатата да е (4х3)+4х3)+4х3) = 36.

Предварително - много благодаря !!!

п.с. Забравих да спомена - става въпрос за скриптче и работи под UNIX!



3  Програмиране / Web development / Помощ за perl -: Aug 27, 2006, 13:59
VladSun, благодаря ти, но скрипта изрично трябва да бъде на Perl(не е нещо зависещо от мен).

soulcollector, благодаря ти и на теб, но какво ще стане, ако в някакъв момент температурата е била 27.7, в следващия е 27.2?
Примерен код

if ($temp >= $critical and ($temp_t == 0.0 or $temp - $temp_t >= 0.5)) {
       temp_warn $file, $temp;
       print "Send note with temperature: $temp\n";

Както аз го виждам - ще е по-голяма от критичната(ще е 27.2),  $temp_t == 0.0 няма да е вярно, а 27.2-27.7 ще е по-малко от 0.5 '<img'>. т.е. температурата ще е паднала с 0.5 градуса, но това няма да доведе до съобщение.
4  Програмиране / Web development / Помощ за perl -: Aug 26, 2006, 16:39
Може би аз не съм се изразил ясно.
Всяка минута в tempdaemon.temp се записва актуалната температура - дата, час, температура(temp_a). Скрипта чете от него, и ако мине над 27 градуса,започва да изпраща съобщения с актуалната температура. Проблема е, че това означава всяка минута да се изпраща съобщение(а температурата не мърда много - с 0.1 градус на 30 минути), което е много досадно, а и скъпо - съобщенията са с SMS(т.е. между 27.0 и 27.2 обикновено минава 1 час, а се получават 60 SMS). Затова се взе решение да се праща съобщение на всеки 0.5 градуса, след като е минала критичната температура. т.е. ако предположим, че "входната" температура е 27.1, то първия SMS да е при нея (входната), а втория - или при 27.6, или ако падне под 27.0 градуса. Знам, че скрипта ми изобщо не е елегантен, но досега изобщо не бях правил каквото и да е на Perl.

Обяснението на моя вариант на скрипта е следното:
Всяка минута в tempdaemon.temp се записва новата актуална температура. Скрипта чете от него, и ако температурата скочи над 27 градуса:
1. проверява, дали във файла test.txt на първия ред стойността е 0.0, и ако е - праща съобщение, и записва актуалната температура на мястото на 0.0(примерно 27.1).
2. при следващата(след една минута) температура взета от tempdaemon.temp се проверява, дали е над 27 градуса, дали в test.txt стойността е различна от 0.0(а тя е, и в такъв случей дали е по-голяма от нея с поне 0.5 градуса. Ако да - праща съобщение, и записва новата на мястото на старата в test.txt. Ако не е по-голяма с поне 0.5 градуса, и стойността е различна от 0.0 - просто продължава нататък изпълнението на кода и не записва/праща нищо.
В моя пример - при записани последно 27.1 градуса в test.txt, да кажем, че температурата се покачва бавно, ще се изпрати съобщение едва когато разликата между актуалната и тази в test.txt стане равна или по-голяма от 0.5 градуса - сефте при минимум 27.6 '<img'> . Има ли пик - примерно била е 27.1 а след една минута се докладва, че е 28.5 - то това(28.5) ще стане актуалната записана в test.txt температура, и разбира се ще се изпрати съобщение.
Пада ли - по същия начин. Особеното е, че ако температурата падне под 27.0 градуса, то първо ще провери дали в test.txt стойността е 0.0, и ако не е (това означава, че преди една минута температурата е била над 27.0 градуса) ще изпрати съобщение със актуалната температура (примерно 26.9 - да спре да се шашка админа '<img'> ), и веднага след това ще запище в test.txt стойността 0.0.



5  Програмиране / Web development / Помощ за perl -: Aug 25, 2006, 13:13
Цитат (soulcollector @ Авг. 25 2006,05:43)

Здрасти, погледни моля те втория ми пост в тази тема - там кода е съвсем друг, а и вече функционира.
6  Програмиране / Web development / Помощ за perl -: Aug 24, 2006, 19:44
Цитат (VladSun @ Авг. 24 2006,19:58)
Не съм чел подробно скрипта, но веднага ми прави впечатление, че отваряш и четеш (а понякога даже не четеш) един и същ файл по няколко пъти.
Имам чувството, че Copy-Paste-a здраво е действал тука '<img'>

Ами така е, но съм го направил съвсем целенасочено!
Както вече писах - нямам почти никакво понятие от Perl,
но успях някакси да го направя пустия му скрипт. Изхождам от знания които имам в други насоки, и не претендирам за "отлични постижения". Лесно е да съставиш алгоритъма, но е рудно да го имплементираш, без да имаш почти никакво понятие от особеностите на езика. Точно за това моля за помощ - за "фината настройка".  '<img'>
7  Програмиране / Web development / Помощ за perl -: Aug 24, 2006, 14:42
Здрасти, много благодаря за помоща!!!
Накрая "спастрих" и аз нещо. Работи безпроблемно. Обаче ми се струва малко тромавичко. Ако имаш идея как да стане по-леко, без обаче да се навреди на функционалитета, ще съм благодарско '<img'>

Примерен код

#!/usr/bin/perl

$file="test.txt";
$critical=27.0;
$string = `tail -1 tempdaemon.temp`;
($date,$time,$temp) = split(" ",$temp_a);
open ( INFILE, "<$file" ) or die "Can't open $file: $!\n";
@lines = <INFILE>;
close INFILE;
$null=0.0;

if ($temp_a>=$critical){
   open ( INFILE, "<$file" ) or die "Can't open $file: $!\n";
        if ($lines[0]!=0.0){
             $temp_t=$lines[0];
             if($temp_a>$temp_t){
                 if(($temp_a-$temp_t)>=0.5){
                      open (OUTFILE, ">$file" ) or die "Can't open $file: $!\n";
                      print OUTFILE "$temp_a\n";
                      print "Send note with temperatur: $temp_a\n";
                      close OUTFILE;
                 }
             }
             if($temp_a<$temp_t){
                 if(($temp_t-$temp_a)>=0.5){
                      open (OUTFILE, ">$file" ) or die "Can't open $file: $!\n";
                      print OUTFILE "$temp_a\n";
                      print "Send note with temperatur: $temp_a\n";
                      close OUTFILE;
                 }
             }
        }
        else{open (OUTFILE, ">$file" ) or die "Can't open $file: $!\n";
                      print OUTFILE "$temp_a\n";
                      print "Send note with temperatur: $temp_a\n";
                      close OUTFILE;
        }
   close INFILE;
}
if ($temp_a<$critical){
     open ( INFILE, "<$file" ) or die "Can't open $file: $!\n";
     if ($lines[0]!=0.0){
     print "Send note with temperatur: $temp_a\n";
     close INFILE;
     open (OUTFILE, ">$file" ) or die "Can't open $file: $!\n";
     print OUTFILE "$null\n";
     close OUTFILE;
     }
}




8  Програмиране / Web development / Помощ за perl -: Aug 07, 2006, 19:46
Цитат (Lord_Bad @ Авг. 05 2006,18:16)
Това, което ти трябва ще намериш тук. Успех.

Много благодаря, но аз се надявах по скоро на директен съвет и може би код. Не ми се налага да използвам Перл, това сега е единичен случей.
9  Програмиране / Web development / Помощ за perl -: Aug 05, 2006, 14:18
Здравейте, нужна ми е малко помощ за един скрипт. Налага ми се да направя известна промяна, но тъй като никога не съм работил с Perl ми идва доста нанагорно. Не познавам толкова добре синтаксиса, а и ...алгоритъма нещо ми убягва.
'<img'>

#!/usr/bin/perl

$critical = 27;
$lock = "temp.lock";

$string = `tail -1 tempdaemon.temp`;

($date,$time,$temp) = split(" ",$string);
if ($temp >= "$critical" && !(-f $lock)) {
print "Allert";
system("/usr/bin/touch $lock");
}

if ($temp < "$critical" && -f $_lock) {
`/bin/rm $lock`;


Както се вижда, скрипта дърпа переодично данни от един файл - tempdaemon.temp
в който се записва температурата всяка минута.
Скрипта е за уведомяване ако температурата се покачи над 27 градуса. Проблема е, че ако се качи над въпросните 27 градуса на всяка 1 минута изпраща съобщение, което е прекалено в случей, че температурата се задържи примерно на 27.1 в продължение на часове.
Идеята е така да се модифицира скрипта, че да праща съобщение само ако е над 27 градуса И разликата с предходното изпращане е повече от 0.5 градуса.
Благодаря много предварително. Всякакви идеи са добре дошли.

П.П. Хрумна ми, че евентуално може да има един файл в който да се записва стойността на една вариабла, която започва от "critical" и се променя само ако разликата между нея и "temp" е поне 0.5(в двете посоки), и съответно да има съобщение само при промяна на вариаблата. Така, че в момента въпроса е по скоро кода с който мога да трия/записвам във файл!



Страници: [1]