version 1.83, 2002/04/10 15:30:13
|
version 1.91, 2002/06/08 15:27:06
|
Line 508 sub HASH {
|
Line 508 sub HASH {
|
return $Values[-1]; |
return $Values[-1]; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item NUM(range) |
|
|
|
returns the number of items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub NUM { |
sub NUM { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $num= $#{@{grep(/$mask/,keys(%v))}}+1; |
my $num= $#{@{grep(/$mask/,keys(%v))}}+1; |
Line 527 sub BIN {
|
Line 536 sub BIN {
|
} |
} |
|
|
|
|
|
#------------------------------------------------------- |
|
|
|
=item SUM(range) |
|
|
|
returns the sum of items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub SUM { |
sub SUM { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $sum=0; |
my $sum=0; |
Line 536 sub SUM {
|
Line 554 sub SUM {
|
return $sum; |
return $sum; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item MEAN(range) |
|
|
|
compute the average of the items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub MEAN { |
sub MEAN { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $sum=0; my $num=0; |
my $sum=0; my $num=0; |
Line 550 sub MEAN {
|
Line 577 sub MEAN {
|
} |
} |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item STDDEV(range) |
|
|
|
compute the standard deviation of the items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub STDDEV { |
sub STDDEV { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $sum=0; my $num=0; |
my $sum=0; my $num=0; |
Line 566 sub STDDEV {
|
Line 602 sub STDDEV {
|
return sqrt($sum/($num-1)); |
return sqrt($sum/($num-1)); |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item PROD(range) |
|
|
|
compute the product of the items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub PROD { |
sub PROD { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $prod=1; |
my $prod=1; |
Line 575 sub PROD {
|
Line 620 sub PROD {
|
return $prod; |
return $prod; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item MAX(range) |
|
|
|
compute the maximum of the items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub MAX { |
sub MAX { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $max='-'; |
my $max='-'; |
Line 585 sub MAX {
|
Line 639 sub MAX {
|
return $max; |
return $max; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item MIN(range) |
|
|
|
compute the minimum of the items in the range. |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub MIN { |
sub MIN { |
my $mask=mask(@_); |
my $mask=mask(@_); |
my $min='-'; |
my $min='-'; |
Line 595 sub MIN {
|
Line 658 sub MIN {
|
return $min; |
return $min; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item SUMMAX(num,lower,upper) |
|
|
|
compute the sum of the largest 'num' items in the range from |
|
'lower' to 'upper' |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub SUMMAX { |
sub SUMMAX { |
my ($num,$lower,$upper)=@_; |
my ($num,$lower,$upper)=@_; |
my $mask=mask($lower,$upper); |
my $mask=mask($lower,$upper); |
my @inside=(); |
my @inside=(); |
foreach (grep /$mask/,keys(%v)) { |
foreach (grep /$mask/,keys(%v)) { |
$inside[$#inside+1]=$v{$_}; |
push (@inside,$v{$_}); |
} |
} |
@inside=sort(@inside); |
@inside=sort(@inside); |
my $sum=0; my $i; |
my $sum=0; my $i; |
Line 610 sub SUMMAX {
|
Line 683 sub SUMMAX {
|
return $sum; |
return $sum; |
} |
} |
|
|
|
#------------------------------------------------------- |
|
|
|
=item SUMMIN(num,lower,upper) |
|
|
|
compute the sum of the smallest 'num' items in the range from |
|
'lower' to 'upper' |
|
|
|
=cut |
|
|
|
#------------------------------------------------------- |
sub SUMMIN { |
sub SUMMIN { |
my ($num,$lower,$upper)=@_; |
my ($num,$lower,$upper)=@_; |
my $mask=mask($lower,$upper); |
my $mask=mask($lower,$upper); |
Line 657 sub expandnamed {
|
Line 740 sub expandnamed {
|
return 0; |
return 0; |
} |
} |
} else { |
} else { |
return '$c{\''.$expression.'\'}'; |
# it is not a function, so it is a parameter name |
|
# We should do the following: |
|
# 1. Take the list of parameter names |
|
# 2. look through the list for ones that match the parameter we want |
|
# 3. If there are no collisions, return the one that matches |
|
# 4. If there is a collision, return 'bad parameter name error' |
|
my $returnvalue = ''; |
|
my @matches = (); |
|
$#matches = -1; |
|
study $expression; |
|
foreach $parameter (keys(%c)) { |
|
push @matches,$parameter if ($parameter =~ /$expression/); |
|
} |
|
if ($#matches == 0) { |
|
$returnvalue = '$c{\''.$matches[0].'\'}'; |
|
} else { |
|
$returnvalue = "'bad parameter name : $expression'"; |
|
} |
|
return $returnvalue; |
} |
} |
} |
} |
|
|
Line 677 sub sett {
|
Line 778 sub sett {
|
if ($_=~/A(\d+)/) { |
if ($_=~/A(\d+)/) { |
my $trow=$1; |
my $trow=$1; |
if ($trow) { |
if ($trow) { |
|
# Get the name of this cell |
my $lb=$col.$trow; |
my $lb=$col.$trow; |
|
# Grab the template declaration |
$t{$lb}=$f{'template_'.$col}; |
$t{$lb}=$f{'template_'.$col}; |
|
# Replace '#' with the row number |
$t{$lb}=~s/\#/$trow/g; |
$t{$lb}=~s/\#/$trow/g; |
|
# Replace '....' with ',' |
$t{$lb}=~s/\.\.+/\,/g; |
$t{$lb}=~s/\.\.+/\,/g; |
|
# Replace 'A0' with the value from 'A0' |
$t{$lb}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; |
$t{$lb}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; |
|
# Replace parameters |
$t{$lb}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge; |
$t{$lb}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge; |
} |
} |
} |
} |
Line 704 sub sett {
|
Line 811 sub sett {
|
} |
} |
} |
} |
} |
} |
|
# For some reason 'A0' gets special treatment... This seems superfluous |
|
# but I imagine it is here for a reason. |
$t{'A0'}=$f{'A0'}; |
$t{'A0'}=$f{'A0'}; |
$t{'A0'}=~s/\.\.+/\,/g; |
$t{'A0'}=~s/\.\.+/\,/g; |
$t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; |
$t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g; |
Line 1201 sub readsheet {
|
Line 1310 sub readsheet {
|
} else { |
} else { |
$fn = $tmphash{'spreadsheet_default_'.$stype}; |
$fn = $tmphash{'spreadsheet_default_'.$stype}; |
} |
} |
|
unless (($fn) && ($fn!~/^error\:/)) { |
|
$fn='default_'.$stype; |
|
} |
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
$defaultsheets{$cnum.'_'.$cdom.'_'.$stype}=$fn; |
} |
} |
} |
} |
Line 1233 sub readsheet {
|
Line 1345 sub readsheet {
|
} elsif($fn=~/\/*\.spreadsheet$/) { |
} elsif($fn=~/\/*\.spreadsheet$/) { |
my $sheetxml=&Apache::lonnet::getfile |
my $sheetxml=&Apache::lonnet::getfile |
(&Apache::lonnet::filelocation('',$fn)); |
(&Apache::lonnet::filelocation('',$fn)); |
print "<pre>$sheetxml</pre>"; |
|
if ($sheetxml == -1) { |
if ($sheetxml == -1) { |
$sheetxml='<field row="0" col="A">"Error loading spreadsheet ' |
$sheetxml='<field row="0" col="A">"Error loading spreadsheet ' |
.$fn.'"</field>'; |
.$fn.'"</field>'; |
} |
} |
%f=%{&parse_sheet(\$sheetxml)}; |
%f=%{&parse_sheet(\$sheetxml)}; |
print "<pre>"; |
|
foreach (sort( keys(%f))) { |
|
print "$_ = $f{$_}\n"; |
|
} |
|
print "</pre>"; |
|
} else { |
} else { |
my $sheet=''; |
my $sheet=''; |
my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); |
my %tmphash = &Apache::lonnet::dump($fn,$cdom,$cnum); |
Line 2294 $tmpdir=$r->dir_config('lonDaemons').'/t
|
Line 2400 $tmpdir=$r->dir_config('lonDaemons').'/t
|
|
|
# --------------------------- Get query string for limited number of parameters |
# --------------------------- Get query string for limited number of parameters |
|
|
foreach (split(/&/,$ENV{'QUERY_STRING'})) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
my ($name, $value) = split(/=/,$_); |
['uname','udom','usymb','ufn']); |
$value =~ tr/+/ /; |
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
|
if (($name eq 'uname') || ($name eq 'udom') || |
|
($name eq 'usymb') || ($name eq 'ufn')) { |
|
unless ($ENV{'form.'.$name}) { |
|
$ENV{'form.'.$name}=$value; |
|
} |
|
} |
|
} |
|
|
|
if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { |
if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'})) { |
$ENV{'form.ufn'}='default_'.$1; |
$ENV{'form.ufn'}='default_'.$1; |
Line 2342 $tmpdir=$r->dir_config('lonDaemons').'/t
|
Line 2439 $tmpdir=$r->dir_config('lonDaemons').'/t
|
|
|
function celledit(cn,cf) { |
function celledit(cn,cf) { |
var cnf=prompt(cn,cf); |
var cnf=prompt(cn,cf); |
if (cnf!=null) { |
if (cnf!=null) { |
document.sheet.unewfield.value=cn; |
document.sheet.unewfield.value=cn; |
document.sheet.unewformula.value=cnf; |
document.sheet.unewformula.value=cnf; |
document.sheet.submit(); |
document.sheet.submit(); |
} |
} |
Line 2571 ENDSCRIPT
|
Line 2668 ENDSCRIPT
|
} |
} |
} |
} |
$r->print('>'); |
$r->print('>'); |
|
|
if (&gettype($asheet) eq 'classcalc') { |
if (&gettype($asheet) eq 'classcalc') { |
$r->print( |
$r->print( |
' Output CSV format: <input type=checkbox name=showcsv onClick="submit()"'); |
' Output CSV format: <input type=checkbox name=showcsv onClick="submit()"'); |