perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




10.02.2012 / 21:34

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragnew line rausschmeissen-->Array unbedingt noetig??
Seitenanfang
Hi!
Ich habe ein Programm geschrieben, das folgendermassen aussieht:

$count=1;
$allchar=0;
open (OUTFILE, "</RESTdatei") || die "Couldn't open file!\n";

while (! eof(OUTFILE)) {
my $char = getc(OUTFILE);
$allchar++;

if ($char =~ m/^[A-Z]+$/){
$count++;
}
}
print "Falsch alignt: ",$count,"\n";
print "Gesamtanzahl: ",$allchar,"\n";
close (OUTFILE);

print $count/$allchar*100," % sind falsch alignt worden!", "\n";

Dieses Programm soll alle Grossbuchstaben in einer Datei zaehlen und alle Buchstaben, die insgesamt vorkommen. problem: am Ende jeder Zeile wir ein newline mitgezaehlt.
Wollte das zuerst mit "chomp" beseitigen, was aber nicht so toll ist, da die einzelnen Zeilen dann hintereinander aufgefuehrt werden und nciht mehr untereinander stehen. habe nun den tip bekommen, dass man das irgendwie mit einlesen in arrays und der split-funktion loesen kann, habe aber leider von arrays ueberhaupt keinen plan! gibt es noch ne andre moeglichkeit oder weiss jemand wie das mit dem array funktionieren soll?

DANKE! BioBee

Datum: 07.02.2005-15:16

Beitragre: new line rausschmeissen-->Array unbedingt noetig??
Seitenanfang
Das mit den Array funktioniert so

my(@parts) = split(/([\s\n])/, $text);

d.h. beim Split werden durch die runden Klammern die Zeichen behalten (landen mit im Array) an denen man splittet.

Mal abgesehen von deinen Code und ganz nach deiner Erlaeuterung hab ich folgendes:
Du willst zaehlen wie viel Buchstaben insgesamt in der Datei vorkommen und wie viele davon Groszbuchstaben sind:


my $count_chars = $text =~ tr/A-Za-z/A-Za-z/;
my $count_caps = $text =~ tr/A-Z/A-Z/;

Hier nutze ich ein Perlidiom zum zaehlen von Zeichen, tr ersetzt Zeichen (siehe perldoc perlop), kann aber auch zum Zaehlen von Zeichen genutzt werden, in den man als Ersetzungsliste die gleiche Liste wie die Suchliste nimmt.

Die tr-Methode ist um einiges schneller als das zaehlen ueber die Mustererkennung (m//)!

Um jetzt nicht die ganze Datei in die $text-Variable lesen zu muessen, koennte das ganze dann so aussehen:


#!/usr/bin/perl

use strict;
use warnings;

my($count_chars, $count_caps);
open(FH, '<', $0) or die $!;
while(<FH>) {
$count_chars += tr/A-Za-z/A-Za-z/;
$count_caps += tr/A-Z/A-Z/;
}
close(FH );
printf "Buchstaben insgesamt:\t%d\n", $count_chars;
printf "Groszbuchstaben:\t%d\n", $count_caps;
printf "Groszbuchstaben(%%):\t%d\n", $count_caps * 100 / $count_chars;

Grusz coax.

Datum: 07.02.2005-23:24

-






-
-