Perl - cvičení 13

  1. Od uživatele načtěte jméno adresáře. Přepněte se do tohoto adresáře (když se to nepovede, ukončete program s chybou) a vypište v něm všechny textové soubory, jejichž velikost v Bytech je větší než 5000 (vypište i velikost těchto souborů, použitje formáty tak, že velikosti souborů budou zarovnány vpravo).
    my $jmeno; my $velikost;
    format STDOUT =
    @<<<<<<<<<<<<<<<<<<<<<<<<<@>>>>>>>>>>> B
    $jmeno, $velikost
    .
    
    print "Zadejte adresar: ";
    my $adresar = <>;
    
    system "cd $adresar" or die "Spatne zadane jmeno adresare.\n";
    
    for (<*>) {
            $jmeno = $_; $velikost = -s;
            write if -T and -s > 5000;
    }
    
  2. Čtěte řádky ze souborů, jejichž jména jsou zadána na príkazové řádce. V případě, že se v souboru na řádku vyskytuje slovo 'ahoj' (nezáleží na velikosti písmen), vypíše se do souboru 'vystup' jméno soboru a číslo řádku, kde se slovo vyskytlo. Číslo řádku musí být skutečným číslem řádku v souboru.
    open F, '>vystup';
    my $stary_soubor;
    while (<>) {
            $. = 1 if $stary_soubor ne $ARGV;
            print F "$ARGV radek $.\n" if /ahoj/i;
            $stary_soubor = $ARGV;
    }
    
  3. Přistupte k výstupu programu ls s parametrem -l pomocí roury a zobrazte jména souborů, která mají nastaveno právo pro zápis pro skupinu a byly modifikovány v měsíci dubnu.

    Formát výstupu příkazu ls -l je následující:

    -rw-rw-r--    1 darena   darena        158 dub  6 10:24 data.txt
         ^                                     ^^^          ^^^^^^^^
    právo zápisu pro skupinu             měsíc modifikace   jméno souboru
    

    Možné řešení:

    open LS, 'ls -l | ';
    while (<LS>) {
            my ($prava, undef, undef, undef, undef, $mesic, undef, undef, $soubor) = split /\s+/;
            print "$soubor\n" if $prava =~ /^.....w/ and $mesic eq 'dub';
    }
    
© 2003, František Dařena

Valid XHTML 1.0! Valid CSS!