Leser: 27
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl open (LESEN, "Vokabeln.txt")||die "Die Datei konnte nicht gefunden werden"; $vokabeln=<LESEN>; close (LESEN); @vokabeln_array = split (/:+/, $vokabeln); open (LESEN, "Loesung.txt")||die "Die Datei konnte nicht gefunden werden"; $loesung=<LESEN>; close (LESEN); @loesung_array = split (/:+/, $loesung); $#loesung_array; require (Vokabeltrainer_Unterprogramm);
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
#!/usr/bin/perl $durchgaenge=0; while ($durchgaenge<($#loesung_array+1)) { $zahl=0+rand(3); print"Translate the word $vokabeln_array[$zahl]\n"; $eingabe = <STDIN>; chomp $eingabe; if ($eingabe eq $loesung_array[$zahl]) { print"The translation is correct!\n"; $durchgaenge++; } else { print"The translation is incorrect\n"; print"Do you want to save the incorrect word and answer?\n"; print"(1)Yes (2)No\n"; $antwort=<STDIN>; chomp$antwort; if($antwort eq 1){ print"Please tell me a name how you want to save the wrong answer:\n"; $name=<STDIN>; chomp$name; open(SCHREIB,">nichtgekonnte.txt"); print SCHREIB ">$name\n"; print SCHREIB $eingabe; close(SCHREIB); $durchgaenge++; } else{ $durchgaenge++; } } } exit;
1 2 3 4 5 6 7 8 9 10
while ($durchgaenge<($#loesung_array+1)) { $zahl=0+rand(3); print"Translate the word $vokabeln_array[$zahl]\n"; $eingabe = <STDIN>; chomp $eingabe; ... print SCHREIB $eingabe;
1 2 3 4 5 6 7 8 9 10 11 12 13
my @alle_versuche; while ($durchgaenge<($#loesung_array+1)) { $zahl=0+rand(3); print"Translate the word $vokabeln_array[$zahl]\n"; $eingabe = <STDIN>; chomp $eingabe; push @alle_versuche, $eingabe; ... print SCHREIB join "\n", @alle_versuche;
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
#!/usr/bin/perl use strict; use warnings; open (LESEN, "Vokabeln.txt")||die "Die Datei konnte nicht gefunden werden"; my $vokabeln=<LESEN>; close (LESEN); my @vokabeln_array = split (/:+/, $vokabeln); open (LESEN, "Loesung.txt")||die "Die Datei konnte nicht gefunden werden"; my $loesung=<LESEN>; close (LESEN); my @loesung_array = split (/:+/, $loesung); my$anzahl_loesung= $#loesung_array; my$anzahl_vokabeln= $#vokabeln_array; my @alle_versuche; my @alle_vokabeln; my $durchgaenge=0; while ($durchgaenge<($anzahl_loesung+1)) { my $zahl=0+rand($anzahl_vokabeln); print"Translate the word $vokabeln_array[$zahl]\n"; my $eingabe = <STDIN>; chomp $eingabe; push @alle_versuche, $eingabe; push @alle_vokabeln, $vokabeln_array[$zahl]; if ($eingabe eq $loesung_array[$zahl]) { print"The translation is correct!\n"; $durchgaenge++; } else { print"The translation is incorrect\n"; print"Do you want to save the incorrect word and answer?\n"; print"(1)Yes (2)No\n"; my $antwort=<STDIN>; chomp$antwort; if($antwort eq 1){ open(SCHREIB,">nichtgekonnte.txt"); print SCHREIB ">>Wrong:\n"; print SCHREIB join "\n", @alle_vokabeln; print SCHREIB "\n\n"; print SCHREIB ">>Answer:\n"; print SCHREIB join "\n", @alle_versuche; close(SCHREIB); $durchgaenge++; } else{ $durchgaenge++; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
my %schon_gefragt = (); # ... while ($durchgaenge<($anzahl_loesung+1)) { my $vokabel = $vokabeln_array[$zahl]; # hier prüfen if( exists($schon_gefragt{$vokabel}) ) { # ... hier noch die ganzen Zähler berücksichtigen # + aufpassen, dass keine Endlosschleife entsteht next; # überspringe diese Vokabel } # ... if ($eingabe eq $loesung_array[$zahl]) { print"The translation is correct!\n"; $schon_gefragt{vokabel} = 1; # hier merken $durchgaenge++; } }
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
#!/usr/bin/perl use strict; use warnings; open (LESEN, "Vokabeln.txt")||die "Die Datei konnte nicht gefunden werden"; my $vokabeln=<LESEN>; close (LESEN); my @vokabeln_array = split (/:+/, $vokabeln); open (LESEN, "Loesung.txt")||die "Die Datei konnte nicht gefunden werden"; my $loesung=<LESEN>; close (LESEN); my @loesung_array = split (/:+/, $loesung); my$anzahl_loesung= $#loesung_array; my$anzahl_vokabeln= $#vokabeln_array; my @alle_versuche; my @alle_vokabeln; my $durchgaenge=0; my %schon_gefragt= (); while ($durchgaenge<($anzahl_loesung+1)){ my$vokabel = $vokabeln_array[$zahl]; #$zahl=0+rand($anzahl_vokabeln); if(exists ($schon_gefragt{my$vokabel}) ) { next; } else { print"Translate the word $vokabeln_array[$zahl]\n"; my $eingabe = <STDIN>; chomp $eingabe; push @alle_versuche, $eingabe; push @alle_vokabeln, $vokabeln_array[$zahl]; if ($eingabe eq $loesung_array[$zahl]) { print"The translation is correct!\n"; $schon_gefragt{vokabel} = 1; $durchgaenge++; } else { print"The translation is incorrect\n"; $schon_gefragt{vokabel} = 1; print"Do you want to save the incorrect word and answer?\n"; print"(1)Yes (2)No\n"; my $antwort=<STDIN>; chomp$antwort; if($antwort eq 1){ open(SCHREIB,">nichtgekonnte.txt"); print SCHREIB ">>Wrong:\n"; print SCHREIB join "\n", @alle_vokabeln; print SCHREIB "\n\n"; print SCHREIB ">>Answer:\n"; print SCHREIB join "\n", @alle_versuche; close(SCHREIB); $durchgaenge++; } else{ $durchgaenge++; } } } }
2011-03-07T11:42:59 FuturefloCode (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16#!/usr/bin/perl use strict; use warnings; ... while ($durchgaenge<($anzahl_loesung+1)){ my$vokabel = $vokabeln_array[$zahl]; #$zahl=0+rand($anzahl_vokabeln); if(exists ($schon_gefragt{my$vokabel}) ) { next; } else { ...
1 2 3 4 5 6 7 8
my %schon_gefragt; ... while ($durchgaenge´< ($anzahl_loesung+1)) { my $vokabel = $vokabeln_array[$zahl]; next if $schon_gefragt{$vokabel}++; ... }
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
#!/usr/bin/perl use strict; use warnings; use List::Util ('shuffle'); my ($vokabeln_file, $loesung_file, $nichtgekonnte_file) = ("Vokabeln.txt", "Loesung.txt", "nichtgekonnte.txt"); open (my $vokabeln_FH, '<', $vokabeln_file) || die "Die Datei $vokabeln_file konnte nicht gefunden werden"; chomp(my @vokabeln_array = <$vokabeln_FH>); close ($vokabeln_FH); my %vokabeln; open (my $loesung_FH, '<', $loesung_file) || die "Die Datei $loesung_file konnte nicht gefunden werden"; chomp($vokabeln{$vokabeln_array[$.-1]} = $_) while (<$loesung_FH>); close ($loesung_FH); open(my $schreib_FH, ">>", $nichtgekonnte_file); for my $aufgabe (shuffle @vokabeln_array) { print "Translate the word $aufgabe\n"; chomp(my $eingabe = <STDIN>); if ($eingabe eq $vokabeln{$aufgabe}) { print "The translation is correct!\n"; } else { print "The translation is incorrect\n"; print "Do you want to save the incorrect word and answer?\n"; print "(1)Yes (2)No\n"; chomp(my $antwort=<STDIN>); if ($antwort eq '1') { print $schreib_FH "Wrong: \"$eingabe\" for \"$aufgabe\" (correct is: \"$vokabeln{$aufgabe}\")\n"; } } } close($schreib_FH);
2011-03-07T13:27:32 FuturefloWie hast du und auch die restlichen Benutzer, das Programmieren mit Perl gelernt?
2011-03-07T13:27:32 FuturefloArbeitet ihr damit beruflich?
2011-03-07T13:27:32 FuturefloUnd wird es heute noch häufig verwendet?
Ich bin auf einem Biotechnologischen Gymnasium und mein Lehrer meinte eben, dass Perl relativ gut geeigent sei für große Datenmengen.
QuoteWie hast du und auch die restlichen Benutzer, das Programmieren mit Perl gelernt?
QuoteArbeitet ihr damit beruflich?
QuoteUnd wird es heute noch häufig verwendet?
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
#!/usr/bin/perl use strict; use warnings; # Solche Werte am Anfang des Scripts festlegen, damit man später # nicht lang im Script suchen muss, wenn sich etwas ändert. my ($vokabeln_file, $loesung_file, $nichtgekonnte_file) = ("Vokabeln.txt", "Loesung.txt", "nichtgekonnte.txt"); # Wie von Linuxer schon empfohlen: 3-Argument-Form des open() mit lexikalischem Filehandle open (my $vokabeln_FH, '<', $vokabeln_file) || die "Die Datei $vokabeln_file konnte nicht gefunden werden"; # So klappt das Einlesen mehrerer Zeilen in ein Array chomp(my @vokabeln_array = <$vokabeln_FH>); close ($vokabeln_FH); #my @vokabeln_array = split (/:+/, $vokabeln); open (my $loesung_FH, '<', $loesung_file) || die "Die Datei $loesung_file konnte nicht gefunden werden"; chomp(my @loesung_array = <$loesung_FH>); close ($loesung_FH); #my @loesung_array = split (/:+/, $loesung); #$#loesung_array; # Diese beiden Arrays sind verzichtbar, wenn die Datei nichtgekonnte.txt (wie schon von # Linuxer vorgeschlagen) mit '>>' for appending (also zum Anhängen) geöffnet wird. # Siehe perldoc -f open #my @alle_versuche; #my @alle_vokabeln; # Bei Deiner Methode wird nämlich jedes Mal, wenn der Benutzer nach einem # Fehler 1 wählt, die Datei nichtgekonnte.txt gelöscht und komplett # neu gefüllt. open(my $schreib_FH, ">>", $nichtgekonnte_file); #my $durchgaenge=0; # Statt ($durchgaenge<($#loesung_array+1)) würde ich schreiben # ($durchgaenge <= $#loesung_array) oder gleich for my $durchgaenge (0..$#loesung_array) { # In Schleifen sinnvoll einrücken # Warum 0+? Als Index werden ganze Zahlen verwendet, daher Umwandlung mit int() my $zahl=int(rand(3)); print "Translate the word $vokabeln_array[$zahl]\n"; # Wenn schon in einer Zeile, dann besser so: chomp(my $eingabe = <STDIN>); #push @alle_versuche, $eingabe; #push @alle_vokabeln, $vokabeln_array[$zahl]; if ($eingabe eq $loesung_array[$zahl]) { print "The translation is correct!\n"; # Das Hochzählen übernimmt for #$durchgaenge++; } else { print "The translation is incorrect\n"; print "Do you want to save the incorrect word and answer?\n"; print "(1)Yes (2)No\n"; chomp(my $antwort=<STDIN>); # Der Vergleichsoperator für Zahlen ist '=='; für Strings eq, # - dann würde ich aber einen gequoteten String erwarten. # Perl drückt bei Deinem Konstrukt aber ein Auge zu. if ($antwort eq 1) { #open(my $schreib_FH, ">", $nichtgekonnte_file); #print $schreib_FH ">>Wrong:\n"; #print $schreib_FH join "\n", @alle_vokabeln; #print $schreib_FH "\n\n"; #print $schreib_FH ">>Answer:\n"; #print $schreib_FH join "\n", @alle_versuche; #close($schreib_FH); print $schreib_FH "Wrong: \"$eingabe\" for \"$vokabeln_array[$zahl]\" (correct is: \"$loesung_array[$zahl]\")\n"; #$durchgaenge++; } #else { #$durchgaenge++; #} } } close($schreib_FH);