User since
2007-01-05
11
Artikel
BenutzerIn
Hi, ich muss ein Script erstellen, das für Wörter (viele tausend) einen Index erstellt und dann noch einiges zusätzlich.
Als Zwischenschritt sollen zunächst mal alle Wörter des Textes je nach ihrem Anfangsbuchstaben in einen array, also alle Wörter mit "a" am Anfang in den array @a, alle mit "b" in @b usw.
Mir ist bisher nur eine überaus umständliche Lösung eingefallen, nämlich für jeden Buchstaben einen Befehl verwenden:
if (substr($wort,0,1) eq "a") { push (@a, $wort) };
if (substr($wort,0,1) eq "b") { push (@b, $wort) };
... usw.
Das ist viel Schreibarbeit und wenig elegant.
Gibt es eine Möglichkeit, arrays variabel anzusprechen? Also wenn der Anfangsbuchstabe des Wortes "a" ist, kommt das Wort in den array @a, .... bei "z" in den array @z ?
Bin für jeden Tipp dankbar!
User since
2007-06-09
575
Artikel
HausmeisterIn
erstelle die arrays doch einfach mit einer schleife.
foreach my $buchstabe (a..z) {
foreach my $zahlen (1..10) {
push (@$buchstabe, $zahlen);
}
}
print "$_) ", @$_, "\n" foreach (a..z);
my $ende = <STDIN>;
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
User since
2003-08-04
14371
Artikel
ModeratorIn
Ja, verwende einen Hash mit Arrayreferenzen:
use Data::Dumper;
my %hash;
my $key = substr $wort, 0, 1;
push @{$hash{$key}}, $wort;
print Dumper( \%hash );
print "Alle Worte, die mit 'a' beginnen: ", join " ", @{$hash{a}},"\n";
User since
2007-06-09
575
Artikel
HausmeisterIn
natürlich kann man das auch mit hashs machen\n\n
<!--EDIT|#Kein Kommentar|1182174470-->
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
User since
2003-08-04
14371
Artikel
ModeratorIn
@#Kein Kommentar: schalte mal
[tt]use strict[/tt] ein...
Du hast Barewords drin und symbolische Referenzen sind nicht so toll.
User since
2007-01-05
11
Artikel
BenutzerIn
Hi, danke für den Tipp!
Auf diese Fortgeschrittenen-Idee (bin noch Perl-Anfänger), dass push (@$buchstabe, $wort)
erlaubt ist, bin ich gar nicht gekommen!
User since
2003-08-04
12208
Artikel
Admin1
[quote=perlcharly,18.06.2007, 16:23]Hi, danke für den Tipp!
Auf diese Fortgeschrittenen-Idee (bin noch Perl-Anfänger), dass push (@$buchstabe, $wort)
erlaubt ist, bin ich gar nicht gekommen![/quote]
du solltest es aber nicht tun, sondern renees vorschlag anwenden.
symbolische referenzen sind nicht zu empfehlen (nur in wenigen fällen,
z.b. wenn du die symboltabelle bearbeiten musst)
User since
2003-08-04
12208
Artikel
Admin1
[quote=#Kein Kommentar,18.06.2007, 15:46]natürlich kann man das auch mit hashs machen[/quote]
sollte man sogar. unter strict läuft dein code so eh nicht.
User since
2007-06-09
575
Artikel
HausmeisterIn
ich weiß zwar nicht was an symbolischen referenzen so schlimm ist,
aber renee vorschlag ist wirklich eleganter
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
User since
2006-01-27
3890
Artikel
HausmeisterIn
Hm, reicht Eleganz denn nicht als Grund aus? ;o)
Naja, dazu fand Google im hiesigen Wiki folgende URL:
http://wiki.perl-community.de/bin....ennamen
Mangels Zeit hab ich das Ding selber noch nicht gelesen, aber ich gehe davon aus, dass das wesentliche dort erläutert ist....
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!