Manuel Burghammer: ermittlung der zeilenanzahl bei textdatenbanken

wenn ich per

open(DATA, "<forum.db") print " Datenbank ist nicht zu Öffnen !!";
@datas = <DATA>;
close DATA;

eine datenbank auslese steht dann in irgendeiner systemvariable die anzahl der zeile ??....

ich hab schon 7 dokus durchgeforstet aber kann einfach nix finden......für hilfe wär ich dankbar..

MfG

Manuel

  1. Hi Manuel

    open(DATA, "<forum.db") print " Datenbank ist nicht zu Öffnen !!";
    @datas = <DATA>;
    close DATA;

    Du hast die Datei jetzt zeilenweise in dem Array @datas.
    Mach folgendes:

    $len = @datas;

    Dann steht in $len die Anzahl der Scalaren in dem Array, was der Zeilenanzahl gleichkommt.

    ALEX

    1. hi alex,

      dankeschön....das probier ich sofort aus....wenn das klappt ist das genial.....warum bin ich da nicht selber draufgekommen ??..~grübel~

      Manuel

  2. wenn ich per

    open(DATA, "<forum.db") print " Datenbank ist nicht zu Öffnen !!";
    @datas = <DATA>;
    close DATA;

    eine datenbank auslese steht dann in irgendeiner systemvariable die anzahl der zeile ??....

    ich hab schon 7 dokus durchgeforstet aber kann einfach nix finden......für hilfe wär ich dankbar..

    MfG

    Manuel

    Nuja, es gibt tatsächlich eine Variable mit der aktuellen Zeilennummer: "$." teste das mal so:

    open (WINI, "c:/windows/win.ini") die "$!";
    while (<WINI>){
    chomp;
    push @wini, $_; # zeilenweise pushen
    $az = $.; # $. enthält die aktuelle Zeilennummer
    }
    close WINI;
    print "Die WINI hat $az Zeilen...\n";

    Steht auch so in SELFHTML ;-) Rolf

    1. hallo,

      Steht auch so in SELFHTML ;-) Rolf

      sorry...hab ich nicht gefunden...wohl falsch gesucht..~schäm~....

      trotzdem danke....werds mal versuchen

      Manuel

      1. Hallo Manuel

        sorry...hab ich nicht gefunden...wohl falsch gesucht..~schäm~....

        Tja, das ist bei den Perl docs nicht immer ganz einfach. Diese ganzen seltsamen Variablen sind in der 'perlvar' page gesammelt.
        Wenn Du wirklich nur nach dem Einlesen die Anzahl der Zeilen feststellen willst, solltest Du hier aber die von Alex vorgeschlagene Variante (Array in skalaren Kontext setzen) bevorzugen. Diese duerfte um einiges effizienter sein.

        So lange, Calocybe

  3. Hi,

    na dann möchte ich auch noch einen Beitrag leisten.
    Wie immer aus dem "Perl Cookbook":

    8.2. Counting Lines (or Paragraphs or Records) in a File
    Problem
    You need to compute the number of lines in a file.

    Solution
    Many systems have a wc program to count lines in a file:

    $count = wc -l < $file;
    die "wc failed: $?" if $?;
    chomp($count);
    You could also open the file and read line-by-line until the end, counting lines as you go:

    open(FILE, "< $file") or die "can't open $file: $!";
    $count++ while <FILE>;

    $count now holds the number of lines read

    Here's the fastest solution, assuming your line terminator really is "\n":

    $count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16);
    Discussion
    Although you can use -s $file to determine the file size in bytes, you generally cannot use it to derive a line count. See the Introduction to Chapter 9, Directories, for more on -s.

    If you can't or don't want to call another program to do your dirty work, you can emulate wc by opening up and reading the file yourself:

    open(FILE, "< $file") or die "can't open $file: $!";
    $count++ while <FILE>;

    $count now holds the number of lines read

    Another way of writing this is:

    open(FILE, "< $file") or die "can't open $file: $!";
    for ($count=0; <FILE>; $count++) { }
    If you're not reading from any other files, you don't need the $count variable in this case. The special variable $. holds the number of lines read since a filehandle was last explicitly closed:

    1 while <FILE>;
    $count = $.;
    This reads all the records in the file and discards them.

    To count paragraphs, set the global input record separator variable $/ to the empty string ("") before reading to make <> read a paragraph at a time.

    $/ = '';            # enable paragraph mode for all reads
    open(FILE, $file) or die "can't open $file: $!";
    1 while <FILE>;
    $para_count = $.;

    Bye
    Timothy