3. ZÁKLADNÍ KONCEPTY
1. Datové typy: čísla, texty, pole, hashe; Přetypování
2. Proměnné a rozsah platnosti
3. Metody a funkce
4. Podmínky a logické operátory
5. Smyčky a iterátory
6. Výjimky — ošetření chyb
7. Vstup
8. Výstup
Úvod do programování Přednáška 5
4. vyjimky.rb
require 'net/http'
server = 'www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...
begin
response, data = Net::HTTP.new(server).get('/')
rescue Exception
puts quot;Nemohu se připojit na server #{server}quot;
# ...načteme data uložená na disku...
# data = ...
end
puts data.to_s.scan(
/<div class=quot;art openerquot;><h3><a href=quot;.+quot;>(.*)</a></h3>/).to_s
) if data
Úvod do programování Přednáška 5
5. parsovani_html.rb
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'iconv'
server = 'http://www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...
begin
html = Hpricot( open(server) )
rescue Exception
puts quot;Nemohu se připojit na server #{server}...quot;
exit
end
html.search('div.art.opener h3 a').inner_html
titulek =
puts Iconv.iconv( 'utf-8', 'windows-1250', titulek )
Úvod do programování Přednáška 5
6. parsovani_html.rb
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'iconv'
server = 'http://www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...
begin
Hpricot(
html = open(server) )
rescue Exception
puts quot;Nemohu se připojit na server #{server}...quot;
exit
end
html.search('div.art.opener h3 a').inner_html
titulek =
puts Iconv.iconv( 'utf-8', 'windows-1250', titulek )
http://code.whytheluckystiff.net/hpricot/
www.igvita.com/blog/2007/02/04/ruby-screen-scraper-in-60-seconds/
Úvod do programování Přednáška 5
7. nejpouzivanejsi_slovo.rb
text = File.read 'kafka_promena.txt'
# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)
words = text.tr('-,();'quot;', '').split(' ')
current_word = words.sort.first
word_counts = {}
word_counts[current_word] = {}
count = 0
words.sort.each do |word|
if word == current_word
count += 1
else
count = 1
current_word = word
end
word_counts[word] = {:word => word, :count => count}
Když se Řehoř Samsa
end
nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot; -- [quot;Aquot;, {:count=>37, :word=>quot;Aquot;}]
nepokojných snů, shle
puts quot;Začínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot;
word_counts.sort.each do |word|
proměnil v jakýsi nestv
nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count]
end
puts quot;Nejpoužívanější slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; výskyty.quot;
Úvod do programování Přednáška 5
8. seznam_nejpouzivanejsich_slov.rb
text = File.read 'kafka_promena.txt'
# ---> ... a co seznam slov podle frekvence pouziti?
puts quot;Seznam nejpoužívanějších slov v Kafkově ‚Proměně‘:quot;
most_frequent_words = word_counts.values.collect { |word| [word[:count], word
[:word]] }
most_frequent_words.sort.reverse.each_with_index do |word, i|
puts quot;#{i+1}. #{word[1]}ttt(#{word[0]} výskytů)quot;
end
Když se Řehoř Samsa
nepokojných snů, shle
proměnil v jakýsi nestv
Úvod do programování Přednáška 5
9. nejpouzivanejsi_slovo.rb
1 text = File.read 'kafka_promena.txt'
# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)
words = text.tr('-,();'quot;', '').split(' ')
current_word = words.sort.first
2
word_counts = {}
word_counts[current_word] = {}
count = 0
words.sort.each do |word|
if word == current_word
count += 1
3 else
count = 1
current_word = word
end
word_counts[word] = {:word => word, :count => count}
Když se Řehoř Samsa
end
nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot; -- [quot;Aquot;, {:count=>37, :word=>quot;Aquot;}]
nepokojných snů, shle
puts quot;Začínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot;
word_counts.sort.each do |word|
proměnil v jakýsi nestv
nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count]
4
end
puts quot;Nejpoužívanější slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; výskyty.quot;
Úvod do programování Přednáška 5
20. Zvíře
Pes Ovce
Úvod do programování Přednáška 5
21. animals.rb
1 require 'pp'
2
3 # *** ANIMALS *****************************************************************
4
5 #-- file Animal.rb
6 class Animal
7
8 attr_accessor :name, :position, :color
9
10 def initialize(name)
11 @name = name
12 @position = 0
13 @stuff_in_belly = 0
14 @walk_increment = 1
15 @run_increment = 10
16 puts quot;Hello, I am a #{self.class.to_s.downcase} named #{self.name}!quot;
17 end
18
19 def talk
20 puts quot;#{self.class}: ...quot;
21
22 end
23
Úvod do programování Přednáška 5
22. animals.rb
24 def walk
25 @position += @walk_increment
26 end
27
28 def run
29 @position += @run_increment
30 end
31
32 def feed
33 @stuff_in_belly += 1
34 puts quot;[Chewing on some stuff and happy...]quot;
35 self.poop if @stuff_in_belly > 3
36 end
37
38 def hungry?
39 if @stuff_in_belly < 2
40 true
41 else
42 false
43 end
44 end
45
Úvod do programování Přednáška 5
23. animals.rb
46 protected
47
48 def poop
49 puts quot;[Too much stuff in belly... pooping...]quot;
50 @stuff_in_belly = 0
51 end
52
53 end
54
55
Úvod do programování Přednáška 5
24. animals.rb
56 #-- file Dog.rb
57 class Dog < Animal
58
59 def initialize(name, color)
60 super(name)
61 @color = color
62 @run_increment = 20
63
64 end
65
66 def talk
67 puts quot;#{self.name}: Woof! woof!quot;
68 end
69
70 def fetch(what='stick')
71 puts quot;[#{self.name} is fetching the #{what.downcase}...]quot;
72 end
73
74 end
75
76
Úvod do programování Přednáška 5
25. animals.rb
77 #-- file Sheep.rb
78 class Sheep < Animal
79
80 def talk
81 puts quot;#{self.name}: Beeeeee!quot;
82 end
83
84 end
85
Úvod do programování Přednáška 5
26. animals.rb
86 # === Dog =====================================================================
87
88 # --- Create a dog
89 dog = Dog.new('Bitzer', 'yellow')
90 pp dog
91
92 # --- Dog's properties (attributes)
93 puts quot;Our dog's name is '#{dog.name}'.quot;
94 puts quot;And his color is #{dog.color}.quot;
95
Úvod do programování Přednáška 5
27. animals.rb
96 # --- Make the dog do something
97 puts quot;> Talk, Bitzer!quot;
98 dog.talk
99
100 puts quot;> Fetch, Bitzer!quot;
101 dog.fetch
102 dog.fetch('Ball')
103
104 puts quot;> Walk, Bitzer!quot;
105 dog.walk
106 puts quot;Dog is at position: #{dog.position}.quot;
107 puts quot;> Run, Bitzer!quot;
108 dog.run
109 puts quot;Dog is at position: #{dog.position}.quot;
110
111 puts quot;> Have a snack, Bitzer!quot;
112 dog.feed
113 puts dog.hungry?
114
115 dog.feed
116 dog.feed
117 puts dog.hungry?
118
119 # dog.poop
120 dog.feed
121
122
Úvod do programování Přednáška 5
30. DOMÁCÍ ÚKOL
Navrhněte a naprogramujte třídu TextAnalyzer
TextAnalyzer:
text
•
• characters
• words
• pages
• unique_words
• most_frequent_words
• most_frequent_word
Úvod do programování Přednáška 5
32. PŘÍKLAD
Návrhový vzor ActiveRecord
tabulka people
ID Name Surname E-mail
1 John Smith smith@hotmail.com
2 Susanna Reddick susan@yahoo.com
INSERT INTO people (name, surname, email) VALUES( 'John', 'Smith', 'smith@hotmail.com' );
SELECT * FROM people;
SELECT * FROM people WHERE id = 1;
SELECT * FROM people WHERE surname = 'Smith';
# ActiveRecord::Base.establish_connection ..
Person.create(:name => 'John', :surname => 'Smith', :email => 'smith@hotmail.com')
Person.find(:all)
Person.find(1)
Person.find_by_name('Smith')
Úvod do programování Přednáška 5