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
1076 Artikel
BenutzerIn
[default_avatar]
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