Tak Kubo, třeba to ocení i někdo jiný.. Jak jsi psal e-mail, tak tady jsem ti napsal jednoduchý kód, jak udělat oslovení pro různá jména (křestní, česká)…
def osloveni(jmeno) predposledni_pismena = jmeno.downcase.reverse.slice(0,2).reverse # je-li posledni pismenko takove a takove, pridej jine osloveni osloveni = "o" if %w{ea ba na la ta ra ka}.include?(predposledni_pismena) osloveni = "i" if %w{as}.include?(predposledni_pismena) osloveni = "ku" if %w{ek}.include?(predposledni_pismena) osloveni = "+e" if %w{av tr ef ub in rt il ir an}.include?(predposledni_pismena) osloveni = "+i" if %w{as es ej os}.include?(predposledni_pismena) osloveni = "le" if %w{el al}.include?(predposledni_pismena) # zkratime o pocet znaku, pokud osloveni ma na prvni miste "+", nezkracujeme osloveni.length.times{jmeno.chop!} if osloveni && osloveni.slice(0,1).match(/[a-z]/i) # vypiseme osloveni "#{jmeno}#{osloveni.gsub(/[^a-z]/,'') if osloveni}".capitalize end
a nějaký test:
%w{kuba jakub tomas franta zdenek frantisek ladislav jarmila jitka petr vaclav josef jiri ondrej ales petra andrea pavel lubos martin robert vlastimil roman}.each{|jmeno| puts osloveni(jmeno)}
a výsledek?
Kubo Jakube Tomasi Franto Zdenku Frantisku Ladislave Jarmilo Jitko Petre Vaclave Josefe Jiri Ondreji Alesi Petro Andreo Pavle Lubosi Martine Roberte Vlastimile Romane
Tak. A jak to vlastně funguje?
- řádek 2 – do proměnné “predposledni_pismena” si uložíme poslední dvě písmenka jména. A to tak, že jméno převedeme na malá písmena (downcase), otočíme (reverse), vybereme dvě písmena od prvního (slice) a opět otočíme.
- řádek 4 až 9 – tuto proměnnou otestujeme, zda spadá do pole nadefinovaných posledních dvou písmen. Pole nám vytvoří příkaz “%w{}“, a jen metodou “include?” otestujeme, zda se proměnná nachází v tom poli hodnot – pak ji přiřadíme příslušný “konec” ke jménu
- řádek 11 – jméno zkrátíme o tolik znaků, kolik obsahuje ta koncovka. Ale pozor – obsahuje-li koncovka na první pozici něco jiného než písmeno (např. “+”), pak jméno nekrátíme. Příkaz “chop” odmaže poslední písmeno z daného řetězce.
- řádek 13 – jen spojíme jméno a danou koncovku (existuje-li) a uděláme první písmeno velké (capitalize)
Jasně, je tu hned několik věcí. Není to otestované pro všechna jména. Jen na ty, co jsem si vzpomněl :-) Pak to neumí diakritiku (dalo by se jistě udělat také). A možná by to šlo optimalizovat ještě víc – ale – však můžete napsat tipy do komentářů.
Nazdarek tati, udělal jsem něco podobného.
Je to tvořítko na Jedijská jména, je to napsaný v Ruby, dá se to spustit jenom přes Ruby, pokusim se to pro ostatní udělat i v C++, ale mam trochu problém s tim .slice v céčku, ale to je jedno, řiď se podle instrukcí a na konci ti to řekne jméno ;)
Tady odkaz na ulozto, pokud to nepujde, tak rekni.
Odkaz: http://www.uloz.to/6941870/jmeno-rb