Thread Array of Hashes aus Datei anlegen (53 answers)
Opened by Flips87 at 2020-02-04 11:19

Raubtier
 2020-02-05 12:58
#191309 #191309
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
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)

View full thread Array of Hashes aus Datei anlegen