erstes pearl-"prog" anfängerhilfe

banz

Aktives Mitglied
Thread Starter
Dabei seit
26.05.2003
Beiträge
409
Reaktionspunkte
0
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.
 
gerne, aber wo ist ein Link dazu, oder hab ich das übersehen?
 
link? hab keinen Webspace, könnte dir das teilchen entweder schicken, oder den Text komplett hier posten(ist ja nicht so lang;)
 
ja, poste einfach mal, dann können auch noch andere daran teilhaben!
 
#!/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";
 
Sorry, issn bisken unübersichtlich angekommen und die Umlaute sind auch daneben, aber vielleicht geht`s auch so
 
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__
 
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, $CharPos, 1) eq " ") { $WordCount = $WordCount + 1 }
		$CharPos = $CharPos + 1;
	} # Ende until-Schleife
	...
}

das kann man kürzer schreiben:

PHP:
while(<INFILE> ) {
	...
	$WordCount += 1;
	$WordCount += scalar( split( " ", $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 );
	...
}
 
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:
 
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
 
Zurück
Oben Unten