|
|
- ## 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")
- ```
|