erstes pearl-"prog" anfängerhilfe

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von banz, 09.09.2003.

  1. banz

    banz Thread Starter MacUser Mitglied

    Beiträge:
    406
    Zustimmungen:
    0
    MacUser seit:
    26.05.2003
    hi, hoffe das Thema passt ungefähr hier rein.
    Habe ein Anfänger-Übungs-programm in Pearl "Geschrieben",
    Aufgabe:
    -Öffnen einer bestimmten Textdatei (.txt)
    -Zählen und Drucken der Zeichen
    -Zählen und Drucken der Wörter
    -Zählen und Drucken der Zeilen
    habe alles laut Anweisung gemacht, das mit den Zeichen und Wörtern funzt auch ganz gut, nur die Zeilen zählt er nicht richtig.
    Kann sich vielleicht jemand das Programm mal angucken und mir verraten wo ich mich vertippt habe? Wäre supernett.
     
  2. /etc

    /etc MacUser Mitglied

    Beiträge:
    137
    Zustimmungen:
    0
    MacUser seit:
    21.08.2003
    gerne, aber wo ist ein Link dazu, oder hab ich das übersehen?
     
  3. banz

    banz Thread Starter MacUser Mitglied

    Beiträge:
    406
    Zustimmungen:
    0
    MacUser seit:
    26.05.2003
    link? hab keinen Webspace, könnte dir das teilchen entweder schicken, oder den Text komplett hier posten(ist ja nicht so lang;)
     
  4. /etc

    /etc MacUser Mitglied

    Beiträge:
    137
    Zustimmungen:
    0
    MacUser seit:
    21.08.2003
    ja, poste einfach mal, dann können auch noch andere daran teilhaben!
     
  5. banz

    banz Thread Starter MacUser Mitglied

    Beiträge:
    406
    Zustimmungen:
    0
    MacUser seit:
    26.05.2003
    #!/usr/bin/perl -w

    # prog um Zeichen, W??rte und Zeilen einer .txt-datei zu z?§hlen
    $TheFile = "beispiel.txt";

    # Datei ??ffnen, falls vorhanden, oder prog schliessen
    open (INFILE, $TheFile) or die "Die Datei $TheFile konnte nicht gefunden werden.\n";

    # initialisieren der Z?§hlr
    $CharCount = 0;
    $WordCount = 0;
    $LineCount = 0;
    while(<INFILE>) {
    $TheLine = $_; # Zeileninhalt speichern
    chomp($TheLine); # Zeilenumbruch entfernen
    $LineCount = $LineCount + 1;
    $LineLen = length($TheLine);
    $CharCount = $CharCount + $LineLen;
    if($TheLine eq "") { next }; # Zeile ist leer, weiter
    $WordCount = $WordCount + 1; # Zeile hat mind. 1 Wort
    $CharPos = 0;
    until($CharPos == $LineLen)
    {
    if(substr($TheLine, $CharPos, 1) eq " ")
    { $WordCount = $WordCount + 1 }
    $CharPos = $CharPos + 1;
    } # Ende until-Schleife
    } # Ende while(<INFILE>)-Schleife

    # Ergebnis
    print "Fuer die Datei $TheFile:\n";
    print "Anzahl der Zeichen $CharCount\n";
    print "Anzahl der Woerter $WordCount\n";
    print "Zeilenanzahl $LineCount\n";
     
  6. banz

    banz Thread Starter MacUser Mitglied

    Beiträge:
    406
    Zustimmungen:
    0
    MacUser seit:
    26.05.2003
    Sorry, issn bisken unübersichtlich angekommen und die Umlaute sind auch daneben, aber vielleicht geht`s auch so
     
  7. Descartes

    Descartes unregistriert

    Beiträge:
    189
    Zustimmungen:
    0
    MacUser seit:
    14.12.2002
    Probiers mal etwas kürzer...

    PHP:
    #!/bin/perl
    #---------------------------------------------------------------------
    #
    use strict;
    use 
    warnings;
    use 
    diagnostics;
    #
    #---------------------------------------------------------------------
    #

    my$zeile, @dummy, @datei$datei_zeilen$datei_woerter$datei_zeichen );


    #
    # Datei 'beispiel.txt' oeffnen, in ein Array laden und Datei wieder schliessen
    #
    open(FILE"< beispiel.txt") or die("Fehler: $!\n");
    @
    datei = <FILE>;
    close(FILE);

    $datei_zeilen = $#datei + 1; # Anzahl Zeilen entspricht der Anzahl der Arrayelemente
                                 # Array beginnt bei 0, daher um 1 erhoehen

    #
    # Ueber jedes Arrayelement (= Zeile) iterieren...
    #
    foreach( @datei ) {
      
    $zeile $_;
      @
    dummy split(" "$zeile);         # aktuelle Zeile an den Leerzeichen aufsplitten und in ein Array speichern

      
    $datei_zeichen += length($zeile);    # Anzahl Zeichen entspricht der Stringlaenge
      
    $datei_woerter += ( $#dummy + 1 );   # Anzahl Woerter in der Zeile entspricht der Anzahl der Arrayelemente
                                           # Array beginnt bei 0, daher um erhoehen
    }

    printf("Anzahl Zeichen: %i\n"$datei_zeichen);
    printf("       Woerter: %i\n"$datei_woerter);
    printf("       Zeilen : %i\n"$datei_zeilen);

    __END__
     
  8. Descartes

    Descartes unregistriert

    Beiträge:
    189
    Zustimmungen:
    0
    MacUser seit:
    14.12.2002
    PHP:
    while(<INFILE> ) {
        ...
        
    # diese Zeile wird nie abgearbeitet? Also weg damit
        
    if($TheLine eq "") { next }; # Zeile ist leer, weiter
        
    ...
    }

    PHP:
    while(<INFILE> ) {
        ...
        
    $WordCount += 1;
        
    $CharPos 0;
        
    until($CharPos == $LineLen)
        {
            if(
    substr($TheLine$CharPos1eq " ") { $WordCount $WordCount }
            
    $CharPos $CharPos 1;
        } 
    # Ende until-Schleife
        
    ...
    }
    das kann man kürzer schreiben:

    PHP:
    while(<INFILE> ) {
        ...
        
    $WordCount += 1;
        
    $WordCount += scalarsplit" "$TheLine ) );
        ...
    }
    Aber hierbei meckert Perl an, dass implizit generierte @_ Arrays nicht mehr verwendet werden sollen. Also sauberer programmieren und ein separates Array @TheWords verwenden:

    PHP:
    my( @TheWords );
    while(<
    INFILE> ) {
        ...
        
    $WordCount += 1;
        @
    TheWords split" "$TheLine );
        
    $WordCount += ( $#TheWords + 1 );
        
    ...
    }
     
  9. banz

    banz Thread Starter MacUser Mitglied

    Beiträge:
    406
    Zustimmungen:
    0
    MacUser seit:
    26.05.2003
    oh man, danke

    für die schnelle und vor allem ausführliche Hilfe.
    ..auch wenn das Meiste noch wie "Bhf." für mich klingt.
    Das ist heute mein erster Tag mit Pearl, aber ich werd's schon noch lernen!!!!:rolleyes:
     
  10. Descartes

    Descartes unregistriert

    Beiträge:
    189
    Zustimmungen:
    0
    MacUser seit:
    14.12.2002
    Für den Einstieg vielleicht ganz empfehlenswert:

    Einführung in Perl
    http://www.oreilly.de/catalog/einperl3ger/
    Randal L. Schwartz & Tom Phoenix
    Deutsche Übersetzung von Jørgen W. Lang
    3. Auflage Dezember 2001
    ISBN 3-89721-147-5
    Seiten 368
    EUR34.00, SFR57.90

    Oder gleich das Referenzwerk zu Perl von Larry Wall:

    Programmieren mit Perl
    http://www.oreilly.de/catalog/pperl3ger/
    Larry Wall, Tom Christiansen & Jon Orwant
    Deutsche Übersetzung von Peter Klicman
    2. Auflage Juli 2001
    ISBN 3-89721-144-0
    Seiten 1128
    EUR56.00, SFR89.90
     
Die Seite wird geladen...

Diese Seite empfehlen