Michael W.: Wörter Zählen

Hallo,

um es euch zu vereinfachen euch in das problem rein zu denken, versuche ich jetzt mal mein situation genau zu beschreiben:
ich arbeite jetzt in einer firma die ein riesieges netzwerk hat
von frankfurt bis Kölle und weiter, insgesamt 300 aussenstellen und alle sind sie miteinander verbunden.
jeder PC der an diesem netzwerk hängt muss sich mit seinem usernamen anmelden. darauf folgt ein logon-script in dem eine hardwareerkennung durchläuft. diese hardware erkennung wird in einem bestimmten pfad als %user%.log (wenn der user Michael heisst dann heisst die datei logischer weisse michael.log) abgespeichert.
in frankfurt ist der hauptsitz der administratoren die jetzt wissen wollen wieviele pentium und amd athlon in allen 300 aussenstellen stehen. Das Heisst man soll bequem über das admin menü einzelen user einzelne Server und auch das komplette netz auslesen können.

das passiert mit einem shell script (...), so gelangen die einzelnen dateien in frankfurt
jetzt kommt php an die reihe:
zunächst einmal ist das schwirigste alle dateien in eine datei zu bekommen.

sprich im ordner /user befinden sich dann alle %user%.log (es gibt kein doppelt !!)
"user1.log"
"user2.log"
"user3.log"

sollen alle in "gesamtauswertung.log"

das ist punkt 1:
wie schreibe ich mehrere dateien in eine datei (hintereinander) ??

punkt 2:
ich zeige euch jetzt mal den wichtigsten abschnitt der datei, die ensteht wenn sich die einzelenen user anmelden:

PROCESSOR----------------------------------------------------------------------
                               Model: AT clone
                           Processor: Intel Pentium with MMX-167
                       CPU Vendor ID: GenuineIntel
                    CPU Family Level: 5
                     CPU Model Level: 4
                  CPU Stepping Level: 3
               Enhanced Virtual Mode: Yes
             Pentium Style registers: Yes
             Machine Check Exception: Yes
               CMPXCHG8B instruction: Yes
                MMX (MultiMedia eXt): Yes
                    Pentium FDIV bug: No
                         Coprocessor: Internal
             Extended BIOS data area: Yes, at 9F80 (638k)
                  DMA Channel 3 used: No
                  Slave 8259 Present: Yes
                     Real Time Clock: Yes
                        I/O Bus Type: PCI (ver 2.16)

Davon wiederum ist der wichtigste punkt:
Processor: Intel Pentium with MMX-167

wenn ich jetzt (und jetzt kommen wir zum problem und zum grund der geschcihte) nach Pentium suche dann findet das script schonmal 2 wörter (mehr aber auch nicht):

Processor: Intel Pentium with MMX-167
Pentium Style registers: Yes

also müssen wir vor dem zählen der pentiums, erstmal die zeilen suchen die "Processor:" beinhalten und da ist es sehr sehr schlecht das es einen "Coprocessor:" gibt...

Ich habe hier ein script, dass mir zeilen raussucht:

<?php
$a = "Processor:";
$datei = file('report.log');
for($i=0;$i<count($datei);$i++)
  {
  if(eregi($a,$datei[$i])) $gz1 = $datei[$i];
  }
?>

Das script findet aber immer nur das letzte wort in der .log file- d.h. Coprocessor ...

und ausserdem heisst das dann auch wenn ich mehrere processoren in der text-datei stehen hab, dass mir nur die letzte ausgegeben wird.

aber ich will doch eine auflistung aller prozessoren haben.

Punkt 2 ist also:
welches php script macht mir eine auflistung über mehrere worte hinweg. d.h.

meine text.txt:
das ist zeile1 mit begriff1
das ist zeile2 mit begriff2
das ist zeiel3 mit begriff1

das script soll mir alle zeilen geordnet ausgeben:
das ist zeiel1 mit begriff1
das ist zeiel3 mit begriff1

das ist zeile2 mit begriff2

so und jetzt kommen wir zum letzten punkt:

ein 3. script (was am ende alles in eins rein soll), soll mir zählen wie oft begriff1 jetzt vorkommt:
dann steht da am ende

anzahl    Überbegriff
2           Begriff1
1           Begriff2
.
.
.

und jetzt nochmal alle punkte:

punkt1:
mehrere txt oder .log dateien in eine gesamt.log datei zu schreiben.

punkt2:
ein script, dass mir beliebige begriffe einzelner zeilen sucht und geoordnet ausgibt (ausgabe kann man ja dann mit echo varieren)

punkt3:
der wortzähler der mir die anzahl eines beliebigen wortes in einer variablen speichert ($anzahl_a , $a =begriffa) ...

Ich hoffe sehr dass ich meine problem nicht zu knapp geschildert habe und dass ihr mir helfen könnt.

  1. Huhu Michael

    evtl. wäre es eine Alternative die Daten aus den txt-Files
    in eine Datenbank zu importieren.
    Dann hast Du es mit Zählaufgaben und Auswertungen leichter, da Du
    diese direkt in SQL formulieren kannst.
    Die Projektbeschreibung hört sich zumindest so an als ob da noch weitere Wünsche, was die Auswertung angeht, nachkommen werden ...

    so far ...

    lulu

    1. wenn ich wüsste wie das geht !!?

      1. Huhu Michael

        wenn ich wüsste wie das geht !!?

        wann soll/muss es denn fertig sein?

        Wie viele  Dateien sind es denn?
        Du sagtest etwas von 300 Filialen.
        Multipliziert mit im Schnitt x PCs.

        Viele Grüße

        lulu

        1. wann soll/muss es denn fertig sein?

          das müsste schon diese woche passieren, obwohl mein ausbilder das ganze aber jetzt selber in die hand nehmen will.

          Wie viele  Dateien sind es denn?
          Du sagtest etwas von 300 Filialen.
          Multipliziert mit im Schnitt je 2 - 70 PCs.

          kommt halt ganz drauf an ...
          aber da gäbe es ein shell script das dann alle daten von allen servern runteholt und in frankfurt in einen ordner je user eine datei schreibt.

          1. Moin Michael

            das müsste schon diese woche passieren, obwohl mein ausbilder das ganze aber jetzt selber in die hand nehmen will.

            demnach hat sich das Problem für Dich also erledigt, oder?

            Viele Grüße

            lulu

  2. punkt1:
    mehrere txt oder .log dateien in eine gesamt.log datei zu schreiben.

    Funktionen zum Auslesen des Verzeichnisinhalts findest Du in der PHP-Anleitung unter "Directory Funtions", Funktionen zum Einlesen von bzw. Ausgeben in Dateien unter "Filesystem Functions".

    punkt2:
    ein script, dass mir beliebige begriffe einzelner zeilen sucht und geoordnet ausgibt (ausgabe kann man ja dann mit echo varieren)

    Wenn Du nach Zeilen suchst, die so

    Processor: Intel Pentium with MMX-167

    aussehen, dann könntest Du beispielsweise erst die Leerzeichen vorne entfernen, dann prüfen, ob der erste Teil der Zeichenkette "Processor: " lautet und falls ja, den Rest der Zeile speichern.
    Diese zwei benötigten Funktionen findest Du im Kapitel "String Functions".

    Nicht unbedingt besser, aber immer ganz fürchterlich besonders professionell sieht's aus, wenn Du reguläre Ausdrücke benutzt. Der müsste dann ungefähr lauten " *Processor: +(.*)", sprich: Null oder mehr Leerzeichen, das Wort "Processor:", ein oder mehr Leerzeichen und last but not least in Klammern (damit's ausgegeben wird) der Rest der Zeichenkette. Keine Ahnung ob's so funktioniert und man kann es natürlich auch noch verfeinern mit \s oder ähnlichem, bin aber jetzt zu faul, das rauszusuchen.
    Diese Funktion findest im Kapitel "Regular Expression Functions (Perl-Compatible)".

    punkt3:
    der wortzähler der mir die anzahl eines beliebigen wortes in einer variablen speichert ($anzahl_a , $a =begriffa) ...

    Felder haben in PHP die nützliche Eigenschaft, statt Zahlen auch Zeichenketten als Index verwenden zu können. Zum Vorkommen-zählen kannst Du also einfach etwas in dieser Richtung benutzen:

    $processor=funktion_die_den_prozessor_ausgelesen_hat();
      $zaehl_mir_mal[$processor]++;

    Am Ende der Prozedur solltest Du dann ein solches Feld haben:

    $zaehl_mir_mal["Intel Pentium with MMX-167"]=23;
      $zaehl_mir_mal["AMD Athlon Tralala"]=42;
      $zaehl_mir_mal["PIC16C72"]=4578996421245;

    Alles ohne Anspruch auf Vollständigkeit oder Richtigkeit und nur als Denkanstoß gedacht.

    Schönen Tag,
      soenk.e

    1. du hast mich auf ne idde gebracht: wenn man die leerzeichen mitsucht bekommt man nur ein ergebniss.

      ich finde die php dokumentationen total schlecht gemacht, obwohl die übersicht in ordnung ist. ich raff aber nie wie ich das meinen problemen anpassen kann ...
      kannst du mal schauen wie so ein script in etwa aussieht dass ich am ende halt im script nur die gesamt.log angebe und eben nach der suche nach den verschiedenen prozessoren die einzelnen prozessoren gezählt werden ...

      Danke