Thread Array of Hashes aus Datei anlegen
(53 answers)
Opened by Flips87 at 2020-02-04 11:19
Ich frage mich, was du (hlubenow) da kompliziertes mit dem getCount erreichen willst. Außerdem hast du extrem viele globale Variablen (schlecht!)
Ich schlage was anderes vor: Code (perl): (dl
)
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 use strict; use Data::Dumper; my $filename = 'test.txt'; # hier musst du angeben, wie deine Datei kodiert ist # unter Windows wahrscheinlich Windows-1252 statt utf-8 # die Angabe ist wichtig, damit Umlaute von der Regex # als Buchstaben erkannt werden. open my $inputFH, '<:encoding(utf8)', $filename or die $!; # hier gibst du an, in welcher Kodierung deine Ausgabe auf # die Konsole stattfinden soll. Achtung: dadurch werden Umlaute # von Data::Dumper trotzdem nicht angezeigt, wohl aber in # "printResult" unten. binmode STDOUT, ':utf8'; my @output; while (my $line = <$inputFH>) { my %wordCounter; for my $word (splitLineIntoWords($line)) { ++$wordCounter{$word}; } push @output, \%wordCounter; } printResult(\@output); # gibt auch Umlaute korrekt aus print Dumper \@output; sub splitLineIntoWords { my $line = shift; $line = lc($line); # Kleinbuchstaben - wäre zu debattieren, ob das im Sinne der Aufgabe ist $line =~ s/[^[:alpha:]]/ /g; # Alle Nicht-Buchstaben durch spaces ersetzen return split ' ', $line; # Spezialfall ' ': Whitespace-Split } sub printResult { my $outputLinesRef = shift; my $line = 1; for my $oline (@$outputLinesRef) { while (my ($k, $v) = each %$oline) { print "Zeile $line: Wort $k kommt ${v}x vor.\n"; } ++$line; } } PS: Was soll eigenltich bei so "Wörtern" wie "Hallo2You" passieren? Aktuell werden 2 Wörter "Hallo" und "You" daraus. Soll das so? Last edited: 2020-02-05 13:06:27 +0100 (CET) |