Tehtävä:
Tiedostojenkäsittelyn neljäs tehtävä käsittelee myös tiedostojen sisällön tutkimista. Tällä kertaa palvelimelle on luotu tiedosto "5-4_tiedosto.txt", johon on tallenettu riville joko teksti "ankka" tai "hanhi". Koska hanhet on varsin ikäviä eläimiä, halutaan etukäteen selvittää, millä tiedoston riveillä hanhia sijaitsee.
Tee siis ohjelma, joka avaa tiedoston, ja läpikäy sen rivi riviltä. Jos rivillä lukee "hanhi", tulostetaan käyttäjälle varoitus "Hanhi rivillä [rivinumero]!". Rivinumerointi alkaa 1:stä, eli tiedoston ensimmäinen rivi on rivi numero 1.
Toimiessaan oikein ohjelma tulostaa seuraavaa:
Example output:
Hanhi rivillä 7!
Hanhi rivillä 14!
Vastaus
#!/usr/bin/env ruby
# coding: utf-8
tiedosto = "5-4_tiedosto.txt"
if (!File.exists?(tiedosto))
begin
File.open(tiedosto, File::RDWR|File::CREAT, 0644)
rescue
puts "Tiedostoon #{tiedosto} ei voida kirjoittaa"
Process.exit(1)
end
end
def kirjoita(tiedosto, *sanat)
File.open(tiedosto, "w+:UTF-8") do |f|
f.flock(File::LOCK_EX)
sanat.each { |word| f.puts word }
end
end
def etsiSana(tiedosto, sana)
count = 1
sana = sana.downcase
if (File.readable?(tiedosto))
File.foreach(tiedosto) do |line|
line = line.downcase
if line.to_s.match("^.*" + sana + ".*$")
puts "#{sana.capitalize} rivillä #{count}!"
end
count += 1
end
end
# Tiedosto suljetaan automaattisesti.
end
kirjoita(tiedosto, "ankka", "hanhi", "hanhi", "ankka", "ankka", "hanhi")
etsiSana(tiedosto, "hanhi")