--- loncom/interface/Attic/lonspreadsheet.pm 2001/12/27 19:37:46 1.77
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/01/22 10:05:24 1.79
@@ -1,3 +1,28 @@
+#
+# $Id: lonspreadsheet.pm,v 1.79 2002/01/22 10:05:24 matthew Exp $
+#
+# Copyright Michigan State University Board of Trustees
+#
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
# The LearningOnline Network with CAPA
# Spreadsheet/Grades Display Handler
#
@@ -8,6 +33,7 @@
# 03/19,03/20,03/21,03/27,04/05,04/09,
# 07/09,07/14,07/21,09/01,09/10,9/11,9/12,9/13,9/14,9/17,
# 10/16,10/17,10/20,11/05,11/28,12/27 Gerd Kortemeyer
+# 01/14/02 Matthew
package Apache::lonspreadsheet;
@@ -142,16 +168,16 @@ sub mask {
} else {
if (length($ld)!=length($ud)) {
$num.='(';
- map {
+ foreach ($ld=~m/\d/g) {
$num.='['.$_.'-9]';
- } ($ld=~m/\d/g);
+ }
if (length($ud)-length($ld)>1) {
$num.='|\d{'.(length($ld)+1).','.(length($ud)-1).'}';
}
$num.='|';
- map {
+ foreach ($ud=~m/\d/g) {
$num.='[0-'.$_.']';
- } ($ud=~m/\d/g);
+ }
$num.=')';
} else {
my @lda=($ld=~m/\d/g);
@@ -191,10 +217,7 @@ sub mask {
sub NUM {
my $mask=mask(@_);
- my $num=0;
- map {
- $num++;
- } grep /$mask/,keys %v;
+ my $num= $#{@{grep(/$mask/,keys(%v))}}+1;
return $num;
}
@@ -202,11 +225,11 @@ sub BIN {
my ($low,$high,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
if (($v{$_}>=$low) && ($v{$_}<=$high)) {
$num++;
}
- } grep /$mask/,keys %v;
+ }
return $num;
}
@@ -214,19 +237,19 @@ sub BIN {
sub SUM {
my $mask=mask(@_);
my $sum=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
- } grep /$mask/,keys %v;
+ }
return $sum;
}
sub MEAN {
my $mask=mask(@_);
my $sum=0; my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
$num++;
- } grep /$mask/,keys %v;
+ }
if ($num) {
return $sum/$num;
} else {
@@ -237,45 +260,45 @@ sub MEAN {
sub STDDEV {
my $mask=mask(@_);
my $sum=0; my $num=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=$v{$_};
$num++;
- } grep /$mask/,keys %v;
+ }
unless ($num>1) { return undef; }
my $mean=$sum/$num;
$sum=0;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$sum+=($v{$_}-$mean)**2;
- } grep /$mask/,keys %v;
+ }
return sqrt($sum/($num-1));
}
sub PROD {
my $mask=mask(@_);
my $prod=1;
- map {
+ foreach (grep /$mask/,keys(%v)) {
$prod*=$v{$_};
- } grep /$mask/,keys %v;
+ }
return $prod;
}
sub MAX {
my $mask=mask(@_);
my $max='-';
- map {
+ foreach (grep /$mask/,keys(%v)) {
unless ($max) { $max=$v{$_}; }
if (($v{$_}>$max) || ($max eq '-')) { $max=$v{$_}; }
- } grep /$mask/,keys %v;
+ }
return $max;
}
sub MIN {
my $mask=mask(@_);
my $min='-';
- map {
+ foreach (grep /$mask/,keys(%v)) {
unless ($max) { $max=$v{$_}; }
if (($v{$_}<$min) || ($min eq '-')) { $min=$v{$_}; }
- } grep /$mask/,keys %v;
+ }
return $min;
}
@@ -283,9 +306,9 @@ sub SUMMAX {
my ($num,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my @inside=();
- map {
+ foreach (grep /$mask/,keys(%v)) {
$inside[$#inside+1]=$v{$_};
- } grep /$mask/,keys %v;
+ }
@inside=sort(@inside);
my $sum=0; my $i;
for ($i=$#inside;(($i>$#inside-$num) && ($i>=0));$i--) {
@@ -298,9 +321,9 @@ sub SUMMIN {
my ($num,$lower,$upper)=@_;
my $mask=mask($lower,$upper);
my @inside=();
- map {
+ foreach (grep /$mask/,keys(%v)) {
$inside[$#inside+1]=$v{$_};
- } grep /$mask/,keys %v;
+ }
@inside=sort(@inside);
my $sum=0; my $i;
for ($i=0;(($i<$num) && ($i<=$#inside));$i++) {
@@ -316,25 +339,25 @@ sub expandnamed {
my @vars=split(/\W+/,$formula);
my %values=();
undef %values;
- map {
+ foreach ( @vars ) {
my $varname=$_;
if ($varname=~/\D/) {
$formula=~s/$varname/'$c{\''.$varname.'\'}'/ge;
$varname=~s/$var/\(\\w\+\)/g;
- map {
+ foreach (keys(%c)) {
if ($_=~/$varname/) {
$values{$1}=1;
}
- } keys %c;
+ }
}
- } @vars;
+ }
if ($func eq 'EXPANDSUM') {
my $result='';
- map {
+ foreach (keys(%values)) {
my $thissum=$formula;
$thissum=~s/$var/$_/g;
$result.=$thissum.'+';
- } keys %values;
+ }
$result=~s/\+$//;
return $result;
} else {
@@ -353,11 +376,11 @@ sub sett {
} else {
$pattern='[A-Z]';
}
- map {
+ foreach (keys(%f)) {
if ($_=~/template\_(\w)/) {
my $col=$1;
unless ($col=~/^$pattern/) {
- map {
+ foreach (keys(%f)) {
if ($_=~/A(\d+)/) {
my $trow=$1;
if ($trow) {
@@ -369,11 +392,11 @@ sub sett {
$t{$lb}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge;
}
}
- } keys %f;
+ }
}
}
- } keys %f;
- map {
+ }
+ foreach (keys(%f)) {
if (($f{$_}) && ($_!~/template\_/)) {
my $matches=($_=~/^$pattern(\d+)/);
if (($matches) && ($1)) {
@@ -387,7 +410,7 @@ sub sett {
$t{$_}=~s/(^|[^\"\'])\[([^\]]+)\]/$1.&expandnamed($2)/ge;
}
}
- } keys %f;
+ }
$t{'A0'}=$f{'A0'};
$t{'A0'}=~s/\.\.+/\,/g;
$t{'A0'}=~s/(^|[^\"\'])([A-Za-z]\d+)/$1\$v\{\'$2\'\}/g;
@@ -401,7 +424,7 @@ sub calc {
my $depth=0;
while ($notfinished) {
$notfinished=0;
- map {
+ foreach (keys(%t)) {
my $old=$v{$_};
$v{$_}=eval($t{$_});
if ($@) {
@@ -409,7 +432,7 @@ sub calc {
return $@;
}
if ($v{$_} ne $old) { $notfinished=1; }
- } keys %t;
+ }
$depth++;
if ($depth>100) {
%v=();
@@ -422,14 +445,14 @@ sub calc {
sub templaterow {
my @cols=();
$cols[0]='Template';
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{'template_'.$_};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'template_$_','$fm'".'___eq___'.$fm;
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
@@ -441,25 +464,25 @@ sub outrowassess {
$cols[0]=$rl{$usy}.'
'.
'';
} else {
$cols[0]='Export';
}
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{$_.$n};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
@@ -471,23 +494,23 @@ sub outrow {
} else {
$cols[0]='Export';
}
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m',
+ 'n','o','p','q','r','s','t','u','v','w','x','y','z') {
my $fm=$f{$_.$n};
$fm=~s/[\'\"]/\&\#34;/g;
$cols[$#cols+1]="'$_$n','$fm'".'___eq___'.$v{$_.$n};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z');
+ }
return @cols;
}
sub exportrowa {
my @exportarray=();
- map {
+ foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M',
+ 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z') {
$exportarray[$#exportarray+1]=$v{$_.'0'};
- } ('A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
+ }
return @exportarray;
}
@@ -698,7 +721,7 @@ sub rown {
$maxred=26;
}
if ($n eq '-') { $proc='&templaterow'; $n=-1; $dataflag=1; }
- map {
+ foreach ($safeeval->reval($proc.'('.$n.')')) {
my $bgcolor=$defaultbg.((($showf-1)/5==int(($showf-1)/5))?'99':'DD');
my ($fm,$vl)=split(/\_\_\_eq\_\_\_/,$_);
if ((($vl ne '') || ($vl eq '0')) &&
@@ -721,7 +744,7 @@ sub rown {
$rowdata.=',"'.$vl.'"';
}
$showf++;
- } $safeeval->reval($proc.'('.$n.')');
+ } # End of foreach($safeval...)
if ($ENV{'form.showall'} || ($dataflag)) {
return $rowdata.($ENV{'form.showcsv'}?'':'');
} else {
@@ -756,7 +779,10 @@ sub outsheet {
'
'; } @@ -799,12 +822,12 @@ sub outsheet { $r->print("\n
\n"); $r->rflush(); $r->print('
'.$what.' | '); - map { + foreach ('A','B','C','D','E','F','G','H','I','J','K','L','M', + 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', + 'a','b','c','d','e','f','g','h','i','j','k','l','m', + 'n','o','p','q','r','s','t','u','v','w','x','y','z') { $r->print(''.$_.' | '); - } ('A','B','C','D','E','F','G','H','I','J','K','L','M', - 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', - 'a','b','c','d','e','f','g','h','i','j','k','l','m', - 'n','o','p','q','r','s','t','u','v','w','x','y','z'); + } $r->print('