## 4 Ankka-Hanhi **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") ```