perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 39
Click for quality!




10.02.2012 / 09:46

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragWörter zählen
Seitenanfang
Hallo zusammen,

bin Anfänger und gerade am herumprobieren. Ziel ist folgendes. Der Nutzer gibt in einer Maske einen Text ein. Danach wird ein Button gedrückt und als Antwort gibt es eine Übersicht über die Anzahl der im Text vorkommenden Wörter. Nachstehend mein Code. Ich habe Probleme bei der Wörterverteilung. Ich bekomme es nicht hin daß mir die Wörter richtig gezählt und ausgegeben werden. Was mache ich nur falsch ?

Grüße,
Christian

#!perl
use CGI;
$q = new CGI;
$text = $q->param('textfeld');

if ($text eq "")
{

print $q->header,
$q->start_html('Wörter zählen'),
$q->p('<form action="./woerter8.pl" method="post">'),
$q->h3('Bitte geben Sie einen Text ein:'),
$q->p('<textarea name="textfeld" rows="10" cols="50" maxlength="1000" value=""></textarea>'),

$q->start_table(),
$q->Tr(
$q->td('<input type="submit" value="Absenden">'),
$q->td('<input type="reset" value="Reset"></from>')),
$q->end_table(),

$q->end_html()
}

else {

#Zeichenanzahl
@einzelzeichen = split //, $text;
$indexez = $#einzelzeichen;
$zeichenanzahl = $indexez + 1;

#Wörteranzahl
@woerter = split(/\W*\s+\W*/, $text);
$indexez = $#woerter;
$wortanzahl = $indexez + 1;

#Wörterverteilung

my %zaehler = ();

if (exists $zaehler{$wort}) {
$zaehler{$wort} ++;
}
else {
$zaehler{$wort} = 1;
}

print $q->header,
$q->start_html('Auswertung'),
$q->p('Der von Ihnen eingegebene Text'),
$q->p($text),
$q->p('besteht aus', $zeichenanzahl, 'Zeichen'),
$q->p('oder', $wortanzahl, 'Wörter'),
$q->p('Die exakte Verteilung der Wörter ist wie folgt:');
foreach $wort (sort keys %wortliste) {
print $q->p($wort, $zaehler{$wort},"\n");
}
print $q->end_html();

}


Datum: 05.06.2006-18:57

Beitragre: Wörter zählen
Seitenanfang
Hi,

ich würd' das so machen.


@woerter = split(/\s/, $text);

Dann wird nach allen Leerzeichen, bzw. den Steuerzeichen (\r, \n, \t, \f) gesplittet.

-uw

Datum: 06.06.2006-02:27

Beitragre: Wörter zählen
Seitenanfang
Hi,

Danke, nur darin liegt ja nciht das Problem.

Der Text wird eingegeben, dann in der Variablen $text gespeichert, dann "umgeandelt" in das Array @woerter. Was will ich dann machen:

Dieses Array soll durchlaufen werden, die verschiedenen Wörter gezählt werden. (#Wörterverteilung). Nur das bekomme ich nicht hin.

Wie durchlaufe ich dieses Array richtig ?

Christian

Datum: 06.06.2006-10:35

Beitragre: Wörter zählen
Seitenanfang
my %woerter = ();
my @woerter = ('hallo', 'ich', 'hallo');

for my $wort (@woerter)
{
$woerter{$wort}++;
}

print 'insgesamt ' . (scalar @woerter) . " woerter\nverteilung:\n";
for my $wort (sort {$woerter{$b} <=> $woerter{$a}} keys %woerter)
{
print $wort . ': '. $woerter{$wort} . "\n";
}

Datum: 06.06.2006-11:57

Beitragre: Wörter zählen
Seitenanfang
Hallo Jan,

danke für den Hinweis. Hier wird das Array ja manuell "gefüttert".
Mein Fehler ist wahrscheinlich bei der Übergabe der Werte aus der Variablen $text in das Array. Wo ist da mein Fehler:

my @worte = split(/\W*\s+\W*/, $text);

Christian

Datum: 06.06.2006-12:23

Beitragre: Wörter zählen
Seitenanfang
Hi,

sorry, war heut nacht etwas überarbeitet. Du musst dann natürlich den Array @woerter durchgehen.

[code]
my (@woerter, %zaehler);

# Wortvorkommen
@woerter = split ( /\s+/, $text );

# Wortverteilung
foreach ( @woerter ) {
$zaehler{$_}++;
}
foreach ( keys %zaehler ) {
print "Wort: ".$_." ".$zaehler{$_}." mal vorhanden.";
}
[code]

-uw

Datum: 06.06.2006-14:41

Beitragre: Wörter zählen
Seitenanfang
Danke, so funktioniert es :)

Datum: 06.06.2006-15:19

-






-
-