Perl - cvičení 7

  1. Zkopírujte si soubor http://akela.mendelu.cz/~darena/Perl/regexp.html k sobě a napište program, který načte od uživatele slovo a zjistí, kolikrát se slovo v tomto souboru nachází (tento počet vypište).

    Zadáno         | Vypsáno
    ---------------+----------------------------------------
    vzor           | Slovo 'vzor' se vyskytuje v souboru 10x
    ---------------+----------------------------------------
    a              | Slovo 'a' se vyskytuje v souboru 100x
    ---------------+----------------------------------------
    je             | Slovo 'je' se vyskytuje v souboru 78x
    
    

    Nápověda: použijte vkládání proměnných, pozice, modifikátor g a i.

    
    print "Zadejte slovo: ";
    
    while (chomp($slovo = <>)) {
    
    	open F, "regexp.html";
    
            $pocet = 0;
            while (<F>) {
                    $pocet++ while /\b$slovo\b/gi;
            }
            print "Slovo '$slovo' se vyskytuje v souboru ", $pocet, "x\n\n";
    
            print "Zadejte slovo: ";
    }
    
  2. Napište program, který načte řetězec a zjistí, zda by tento řetězec mohl být zápisem datumu. To znamená, že obsahuje: Vypište informaci o tom, zda je řetězec zadán správně nebo ne. Použijte pouze jeden regulární výraz.

    Příklady
    1. 1. 2000		v pořádku
    1.1.2000		v pořádku
     2. 10. 2002		v pořádku
    01. 02. 2000		v pořádku
    1.01.2050		v pořádku
    1. 12.     2000		v pořádku
    1 . 1 . 2000		chyba
    1. 13. 2000		chyba
    32. 1. 2000		chyba
    1.1.  2200		chyba
    

    Nápověda: použijte třídy znaků, pozice, kvantifikátory, varianty.

    print "Zadejte datum: ";
    while (<>) {
            chomp;
            if (/^[ \t]*(3[01]|[12][0-9]|0?[1-9])\.[ \t]*(1[012]|0?[1-9])\.[\t]*(20[0-9]{2})|2100)[ \t]*$/) {
                    print "v poradku\n";
            } else {
                    print "chyba\n";
            }
            print "Zadejte datum: ";
    }
    # jinak spoužitím vkládání proměnných pro zlepšení čitelnosti.
    $den = '(3[01]|[12][0-9]|0?[1-9])';
    $mesic = '(1[012]|0?[1-9])';
    $rok = '(20[0-9]{2}|2100)';
    $mezery = '[ \t]*';
    /^$mezery$den\.$mezery$mesic\.$mezery$rok$mezery$/;
    
  3. Napište program, který od uživatele načte řetězec reprezentující název souboru s plnou nebo relativní cestou a vrátí pouze jméno souboru bez cesty. Oddělovač jmen adresářů a souborů může být / nebo \.

    Nápověda: použijte třídy znaků, pozice, kvantifikátory, zapamatování do proměnné $1 pomocí kulatých závorek.

    print "Zadejte jméno souboru: ";
    while (<>) {
    	/([^\\\/]*)$/;
    
    	print "Jméno souboru je: $1\n\n";
    
    	print "Zadejte jméno souboru: ";
    }