Hallo,
#!/usr/bin/perl
#!/usr/bin/perl -w
use strict; # danach alle Fehler beheben
@fragen = "";
shift(@fragen);
sowas ist unnoetig:
my @fragen = ();
@antworten = "";
shift(@antworten);
ditto
...
@answers = "";
shift(@answers);
s.o.
$antwort1 = 0;
$antwort2 = 0;
$antwort3 = 0;
$antwort4 = 0;
$antwort5 = 0;
Variablen mit den Endungen 1,2,3,4,5 wollen eigentlich immer Arrays sein
open(IN,"C:/wampp2/cgi-bin/fragen");
hier fehlt, wie praktisch ueberall, die Behandluing von eventell auftretenden Fehlern.
...
($frage,$answer) = split("[(]",$zeile);
($answer1,$answer2) = split(" ",$answer);
($answer2,$null) = split("[)]",$answer2);
so etwas ist immer extrem Fehleranfaellig
my($frage,$answer) = split('[(]',$zeile,2);
waere imho schon ein Fortschritt, besser muesste es mit einer Regex gehen
allerdings wuerde ich das Datenformat ueberdenken.
push(@fragen,$frage);
...
$fragenanzahl++;
das ist eine reduntante Information, sie laesst sich leicht mit scalar @fragen ermitteln.
for($i = 1;$i <= $fragenanzahl;$i++)
{
@{"gruppe".$i} = "";
mit perl kann man so etwas machen, hier macht es imho keinen Sinn, ein zweidimensionales Array draengt sich geradezu auf.
shift(@{$array});
hier ist ein Fehler, der Dir mit use strict und -w nicht passiert waere.
$a = 0;
opendir(DIR,"C:/wampp2/cgi-bin/daten");
while($datei = readdir(DIR))
{
$a++;
if($a >= 3)
{
$teilnehmer++;
open(IN,"C:/wampp2/cgi-bin/daten/$datei");
ist Dir klar, dass auch unter WIndows Verzeichnisse andere Verzeichnisse besitzen?
Zwei Verzeichnisse sind in jedem Verzeichnis vorhanden: . und ..
Du faengst jedoch diesen Fall nicht richtig ab. if($a >= 3) ist kein probates Mittel.
while($zeile = <IN>)
{
chomp($zeile);
($fragenzahl,$antwort) = split(" ",$zeile);
push(@antworten,$antwort);
$antwortengesamt++;
auch hier: reduntante Information, die besser anders abgefragt wird.
und warum nutzt Du nicht die Information $fragenzahl hier um die Gruppen zu befuellen
und schenkst Dir die folgende Schleife.
Der Code ab hier ...
$a = 1;
for($i = 0;$i <= $antwortengesamt;$i++)
{
push(@{"gruppe".$a},@antworten[$i]);
$a++;
if($a > $fragenanzahl)
{
$a = 1;
}
}
... bis hier koennte durch eine Erweiterung in der Einleseschleife ersetzt werden koennen.
Der Code ist ein bißchen lang, aber soweit funzt er!
Die Länge ist nicht das Problem;-)
Als ich den Teil bei mir eingebaut habe, kam ein Servererror!
Und was steht im Logfile?
Grüße
Klaus