RegExp evl. falsch.

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von hehejo, 08.06.2004.

  1. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Hallo, ich hab ein kleines Programm geschrieben, welches aus einer Datei alle Wörter rauszieht und mitzählt wie oft ein Wort vorkommt.
    Dazu nehme ich mit RegExp die Satzzeichen weg usw..
    Aber so ganz will es nicht klappen..
    Einige Worte werden nicht aufgenommen, aber gezählt.
    Das Programm und eine Testdatei hab ich angehängt. Hier findet er z.B. das Wort toll nicht, obwohl es mitgezählt wird.
    Code:
    Geben Sie eine Datei mit Text an: test.txt
    Geben Sie eine Ausgabedatei an: out.txt
    Bitte warten!
                    ANALYSEERGEBNIS
    Wort                    Anzahl          Prozent
    -----------------------------------------------------------
    gg                        1             16.66 %
    hallo                     1             16.66 %
    Insgesamt 6 Woerter[/quote]
    Bestimmt ist es nur ein kleiner Fehler... *hoff*
    
    Wie gehe ich vor:
    Datei einlesen
    Einzelne Zeilen mit RegExp bearbeiten
    Zeile in Wörter aufsplitten
    Ist Wort schon im Hash?
      ja: Dann Counter hochzählen
      nein: Einfügen und Counter auf 1 setzen
    Ausgabe
    
    Vll. kann mir ja jemand helfen.
    
    //ADMIN EDIT
    Sorry, war schneller mit dem löschen :)
     

    Anhänge:

  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Yuuhi

    Yuuhi Jungspund

    Dabei seit:
    21.01.2004
    Beiträge:
    22
    Zustimmungen:
    0
    zuerst benutzt du mal

    use warnings;
    use strict;

    und korrigierst dein script soweit, dass es damit laeuft.
    Schon allein nur mit den Warnungen findet er einiges, was an deinem Skript nicht stimmt...
     
  4. Steve

    Steve 13te

    Dabei seit:
    13.04.2002
    Beiträge:
    381
    Zustimmungen:
    0
    die runden und die eckigen Klammern müssen escaped werden. So wie auch noch einige andere Zeichen!

    Code:
    if(isWordinHash($word) == 1) {
                    $count = $auflistung{$word};
                    $count++;
                    $auflistung{$word} = $count;
                }
                else {
                    $auflistung{$word} = 1;
                }
    
    Diesen ganzen Teil kann man auch als

    Code:
      $auflistung{$word}++ 
    schreiben! So kannste dir die extrafuntion etc. sparen.


    steve
     
  5. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Auf dem richtigem Weg

    Jawohl werde ich machen. Bin mal auf die Fehlermeldungen gespannt.
    Ich hoff es ist nicht zu schlimm...

    Danke für den Tipp. Aber da hätte ich eigentlich selbst draufkommen müssen.
    *schäm*
     
  6. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    use strict und use warning

    So, nun hab ich beides eingebaut und nach etwas Nachdenken und googlen mein Programm wieder zum Laufen gebracht.

    Wenn ich aber ins Format TOP schreiben will, wirft er mir diese Warnungen:
    Code:
    Use of uninitialized value in open at E:\myPerl\Analyst\analyst.pl line 93.
    write() on unopened filehandle TOP at E:\myPerl\Analyst\analyst.pl line 94.
    
    Der Code dazu:
    open TOP;
    write TOP;
    Dann bekomme ich aber immer noch nicht alle Wörter in mein Hash rein.
    Ist das gleiche Problem wie vor dem Einsatz von "strict" und "warnings".
    Welche denn? Was bedeuten denn () und {} in RegExp?


    "$auflistung{$word}++"ist einfach klasse.
    Wie kann ich ein Hash auf NULL setzten, es leeren?
     

    Anhänge:

  7. #6 ExRevel, 09.06.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    Wenn du ein Hash leeren möchtest gibt es mehrere Möglichkeiten, die die am deutlichste ist siehst du hier, man nutzt die keys-funktion und eine Schleife.
    Code:
    foreach $key (keys %HASH) {
        delete $HASH{$key};
    }
    
    Um es ganz einfach zu machen kannst du das Hash aber auch einfach neu definieren oder es "entdefinieren" :)
    Code:
    %HASH = ();
    # oder ...
    undef %HASH;
    
    Ich kann dir http://www.perldoc.com nur wärmstens ans Herz legen, dort findest du gute man-pages im html format samt Suchfunktion.

    ciao Exi
     
  8. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Danke.

    "undef %HASH" sagt mir zu. Ist schnell getippt und ist IMHO auch selbsterklärend.

    perdoc.com -> da schau ich hin!
     
  9. #8 ExRevel, 09.06.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    Jo, undef ist auch schneller als die For-Schleife, aber ich finde es immer gut auch Beispiele zu geben die so eine Struktur der Handlung durchblicken lassen, die man dort gerade begeht.

    Und Perldoc hat mich oft vor dem Selbstmord aufgrund eines Perlproblems gerettet in den letzten 3 Jahren. ;)

    ciao Exi
     
  10. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Das hier verstehe ich nicht:
    Code:
    @buchstaben =split(/ */, 'hi there');[CODE]
    Wie funktioniert "/ */"?
     
  11. #10 ExRevel, 09.06.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
  12. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Kannst du mir bitte dennoch wegen dem geschlossenem Top helfen?
     
  13. #12 ExRevel, 09.06.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    Ich kann erst heute gegen abend schaun, da ich noch auf der Arbeit bin.
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. Yuuhi

    Yuuhi Jungspund

    Dabei seit:
    21.01.2004
    Beiträge:
    22
    Zustimmungen:
    0
    Ich habe es mal entsprechend geaendert, damit es ohne Warnungen und scheinbar sogar richtig laeuft.
    Angehaengt ist ein diff zum vorherigen Programm. Um zu verstehen was $~ macht solltest du die Dokumentation zu write lesen (perldoc perlfunc).
     

    Anhänge:

  16. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Danke, ich bin grad am Anschauen und Testen!
     
Thema:

RegExp evl. falsch.

Die Seite wird geladen...

RegExp evl. falsch. - Ähnliche Themen

  1. regexp für alle user einer bestimmten Maildomain

    regexp für alle user einer bestimmten Maildomain: Hallo, ich brauche den regulären Ausdruck, der mir erlaubt alle Mailadressen von firma.de zu filtern. Ich habe es schon mit folgenden...
  2. RegExp für "Wort|NN"

    RegExp für "Wort|NN": Hallo zusammen, ich habe eine Textdatei mit einigen tausend Zeilen, die in etwa so aussehen: ---------- Absenkung|NN -0.3434 Absenkungen...
  3. Blockade bei regexp - wie Exact-Match definieren?

    Blockade bei regexp - wie Exact-Match definieren?: Hallo Leute, komme gerade nicht weiter, dabei ist es eig. was banales. Wollte mit grep nach nem definierten Wert suchen und aufgrund der hohen...
  4. regexp

    regexp: lo zusammen, mein 100. post in den letzten paar tagen aber komme schon wieder nicht weiter... ich möchte in meinem script prüfen lassen, ob eine...
  5. regexp zum Zaehlen von Buchstaben

    regexp zum Zaehlen von Buchstaben: Hallo, ich wuesste gerne den regulaeren Ausdruck (fuer grep o.ae.), um Zeilen aus einer Textdatei auszuwaehlen, die einen bestimmten Buchstaben...