Klaus Mock: Eine Variable für eine entsprechende Antwort counten lassen

Beitrag lesen

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