Thread Arbeitsspeicherproblem in Perl lösen (17 answers)
Opened by soezkan at 2008-01-26 15:13

soezkan
 2008-01-27 12:15
#105231 #105231
User since
2008-01-24
17 Artikel
BenutzerIn
[default_avatar]
Mit der folgenden Funktion binde ich das Perl in mein PHP-Skript ein:
Code: (dl )
1
2
3
function sunmoonriseset($lon, $lat, $tz, $year, $month, $day, $lang) {
return @exec("perl c:/apache/xampp/cgi-bin/sunmoon.pl lon=".$lon." lat=".$lat." tz=".$tz." year=".$year." month=".$month." day=".$day);
}


Alles was das PHP macht, ist den Wert der da rauskommt in ein CSV zu schreiben.
Sonst passiert nicht viel. Ich benutze Windows XP als Betriebssystem und ich
lasse mir jede bearbeitete Zeile per print(...) ausgeben: liegts vielleicht auch daran?

Vielen Dank!

Soezkan

ps:

hier das perl, in das die Indian.pm eingebunden wird:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
use strict;
use Date::Indian;
use POSIX qw(ceil floor);
use Math::Round;

my(%FORM, $pair, $value, $name); # Hash FORM wird initialisiert

foreach $pair (@ARGV) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}

@ARGV = ();

my $date = Date::Indian->new(
ymd => sprintf("%s-%s-%s",$FORM{'year'},$FORM{'month'},$FORM{'day'}), # ex: ymd => '2003-10-31'
tz => sprintf("%s",dec2timezone($FORM{'tz'})), # ex: tz => '-5:30'
locn => sprintf("%sE %sN",$FORM{'lat'},$FORM{'long'}) # ex: locn =>'82:30E 17:25N'
);

my (@y, $m, $d, $t ) = $date -> ymd();

my ($moonrise, $moonset, $flag) = $date -> moonriseset();
my ($sunrise, $sunset, $flag) = $date -> sunriseset();

$moonrise = dec2hour_minute($moonrise);
$moonset = dec2hour_minute($moonset);

$sunrise = dec2hour_minute($sunrise);
$sunset = dec2hour_minute($sunset);

printf "MA $moonrise, MU $moonset|SA $sunrise, SU $sunset";


sub dec2time {
my ($Dec,$Hour,$m,$Minute,$s,$Second);

$Hour = floor($_[0]);
$m = $_[0] - $Hour;
$Minute = floor($m*60);
$s = ($m*60) - $Minute;
$Second = floor($s*60);

if($Hour < 10) {
$Hour = sprintf("0%s",$Hour);
}
if($Minute < 10) {
$Minute = sprintf("0%s",$Minute);
}
if($Second < 10) {
$Second = sprintf("0%s",$Second);
}

return $Hour.":".$Minute.":".$Second;
}

sub dec2hour_minute {
my ($Dec,$Hour,$m,$Minute,$s,$Second);
$Hour = floor($_[0]);
$m = $_[0] - $Hour;
$Minute = round($m*60);

if($Hour < 10) {
$Hour = sprintf("0%s",$Hour);
}
if($Minute < 10) {
$Minute = sprintf("0%s",$Minute);
}

return $Hour.":".$Minute;
}

sub dec2timezone {
my ($Dec,$Hour,$m,$Minute,$s,$Second,$minus);

if($_[0] < 0) {
$Hour = floor(abs($_[0]));
$m = abs($_[0]) - $Hour;
$minus = -1;
}
else {
$Hour = floor($_[0]);
$m = $_[0] - $Hour;
$minus = 1;
}

$Minute = round($m*60);

if($Minute < 10) {
$Minute = sprintf("0%s",$Minute);
}

$Hour = $minus * $Hour;

return $Hour.":".$Minute;
}

View full thread Arbeitsspeicherproblem in Perl lösen