tomek: Anzahl eines bestimmten Begiffes in einer Datei ausgeben

Hallo
ich (25, ledig, nicht suchend, kein Programmierer)
möchte in einem *txt file alle Worte die "XXXX" (ein x mehr für den anstand *g*) lauten zählen und deren Anzahl ausgeben.
Leider weiß ich nicht wie!
Kann‚st Du mir schreiben was ich in dem script ändern soll damit es läuft.
Das ist mein script (bisher kann ich nur Zeilen zählen, wollte aber auch zeigen, daß ich immerhin etwas gemacht habe...)
danke:

$datei = '*.txt';

open(file,"$datei");
while(<file>) {
$TheLine = $_;
chomp($TheLine);
$LineCount = $LineCount + 1;
}
$LineCount = $LineCount / 2;

print "Content-Type: text/html\n\n";
print "<html>";
print "<body>";
print "<font face = "Comic Sans MS" size = "3">";
print "(";
print $LineCount32;
print ")";
print "</body>";
print "</html>";

  1. Hi,

    ich (25, ledig, nicht suchend, kein Programmierer)
    möchte in einem *txt file alle Worte die "XXXX" (ein x mehr für
    den anstand *g*) lauten zählen und deren Anzahl ausgeben.

    oh man, ok, dann erklär ichs halt nochmal:

    Datei öffnen:

    open(DAT,"<bla.txt") or die("couldn't open file: $!");

    einlesen:

    while(<DAT>)
    {

    sind da XXXX drin?

    while($_ =~ /XXXX/g)
      { $j++; }

    }

    close(DAT);

    das nächste mal machst du das vielleicht auch so, wie ich das
    erkläre? ich hab dir doch die Lösung in den Chat geschrieben, genau
    so, wie sie da steht!

    *grummel*

    mfg
    CK1

  2. Hallo Tomek,

    In Rücksprache mit Christian habe ich noch eine andere Möglichkeit, die vielleicht erwähnenstwert ist.

    {
      # Recordseparator "lokal" machen
      local $/;
      open (DATEI, $datei) die "Kann $datei nicht öffnen: $!";
        # Datei in eine einzelne Variable lesen
        $content = <DATEI>;
      close DATEI;
      # Anzahl von $word bestimmen
      $num_of_word = $content =~ s/($word)/$1/g;
    }

    Das funktioniert, weil s/// die Anzahl der Ersetzungen zurückgibt. Hier wird das Gefundene durch sich Selbst ersetzt, wodurch den String nicht verändert wird.
    Afaik sind Reguläre Ausdrücke (wenn sie nicht "fehlerhaft" sind) oft schneller, als häufige Schleifenaufrufe. Bei einer kleinen Datei ist es vielleicht noch egal, bei einer Datei mit vielen Worten in vielen Zeilen und vielen Treffern, macht es sich vielleicht doch ein wenig bemerkbar :-).

    Gruß AlexBausW

    1. DANKE EUCH!
      CHRISTIAN ich habe tats. noch nicht alles verstanden.

      Ich habe die Lösung von ALex genommen und es funktioniert... bis auf ein kleines Problem. Wenn das zu zählende Wort im Script kein einziges Mal vorkommt , erhalte ich einen internalservererror.

      das script:

      $datei = '*.txt';

      {
        # Recordseparator "lokal" machen
        local $/;
        open (DATEI, $datei) die "Kann $datei nicht öffnen: $!";
          # Datei in eine einzelne Variable lesen
          $content = <DATEI>;
        close DATEI;
        # Anzahl von gesuchtesWort bestimmen
        $num_of_word = $content =~ s/(gesuchtesWort)/$1/g;
      }

      print "Content-Type: text/html\n\n";
      print "<html>";
      print "<body>";
      print "<font face = "Comic Sans MS" size = "3">";
      print "(";
      print $num_of_word;
      print ")";
      print "</body>";
      print "</html>";

      1. Hallo Tomek,

        [...] und es funktioniert... bis auf ein kleines Problem. Wenn das zu zählende Wort im Script kein einziges Mal vorkommt , erhalte ich einen internalservererror.

        Dann schau doch bitte mal in die Errorlogdatei Deines Servers, und poste die Fehlermeldung.

        Gruß AlexBausW