## cvičení 11
## Zpracování textu 2, regulární výrazy
import re

# UKOL 01
# Napište funkce, která přečte všechny jména v souboru NAMES.txt, zpracuje
# je tak, aby měla velké pouze první počáteční písmeno (JOHN -> John) a
# seřadí je v abecedě. Po té je uloží do jiného souboru.

def process_names(input_filename, output_filename):
    pass

# process_names('NAMES.txt', 'names.txt')


# UKOL 02
# Napište funkci, která spočítá průměrný počet slov ve větě (souvětí).
# Výsledek se může měnit od vzorového výstupu podle přesnosti počítání.
def mean_sentence_length(filename):
    pass

# Vzorový výstup
# >>> print(mean_sentence_length('sherlock-holmes.txt'))
# 13.648854010961633


# UKOL 03*
# Napište funkci text_imitation(filename, length), která
# analyzuje text v souboru filename. Funkce pak vygeneruje
# pseudo-náhodný text o length slovech. Text se generuje po
# slovech. Další generované slovo se náhodně vybírá z těch,
# které v původním textu po naposledy vygenerovaném slově
# následovaly.
def text_imitation(filename, length):
    pass


## regulární výrazy
# UKOL 04
# Pomocí regulárního výrazu napište funkci, která určí, zda zadaný
# výraz je celé číslo.
def is_integer(string):
    pass

# Vzorový výstup
# >>> print(is_integer(''))
# False
# >>> print(is_integer('dvanáct'))
# False
# >>> print(is_integer('12'))
# True
# >>> print(is_integer('6 koček'))
# False

# UKOL 05
# Pomocí regulárního výrazu napište funkci, která určí, zda zadaný
# výraz je desetinné číslo.
def is_float(string):
    pass

# Vzorový výstup
# >>> print(is_float('1.'))
# False
# >>> print(is_float('-42'))
# True
# >>> print(is_float('221.545'))
# True

# UKOL 06
# Pomocí regulárního výrazu napište funkci, která určí, zda zadaný
# výraz je platná emailová adresa.
def is_email(string):
    pass

# Vzorový výstup
# >>> print(is_email('me@email.com'))
# True
# >>> print(is_email('me@notemail'))
# False


# ÚKOL 07
# Napište funkci <search_in_file(pattern, filename)>, která vrátí
# seznam všech řádku ze souboru <filename>, které mají regexp shodu s
# se vzorem <pattern>.
def search_in_file(pattern, filename):
    result = []
    with open(filename) as f:
        lines = f.read().split('\n')        # nacteme vsechny radky do seznamu
        for line in lines:                  # prochazime radky a hledame shodu
            if re.search(pattern, line):
                result.append(line)
    return result


# ÚKOL 08
# Pomocí funkce <search_in_file>,
# najděte v souboru names.txt všechna jména, která:
#
#     obsahují <OO>
#     obsahují alespoň 3 znaky <O> (ne nutně po hned sobě)
#     obsahují pouze samohlásky
#     obsahují pouze souhlásky
#     začínají na <B> nebo <D> a končí na <W> nebo <Z>
#     obsahují buď <INF> nebo <REC>
#     začínají a končí na <A> a mají nejvýše 4 písmena


if __name__ == "__main__":
    # zde můžete volat implementované funkce a zkusit si, jak fungují
    print(is_integer('-42'))
    print(search_in_file(r'^A.{3}$', 'names.txt'))
