Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

1.9 KiB

2 Tiedostoon kirjoittaminen

Tehtävä:

Luvun toisessa tehtävässä harjoitellaan tiedostoon kirjoittamista luomalla ohjelma, joka jatkaa kirjoittamista niin kauan kunnes käyttäjä pyytää ohjelmaa lopettamaan. Ohjelma pyytää käyttäjältä syötettä käskyllä "Kirjoita jotain (lopeta lopettaa):" ja jatkaa niin kauan kunnes käyttäjä kirjoittaa lopeta. Tässä vaiheessa ohjelma tallentaa muun, aiemmin kirjoitetun tekstin tiedostoon, ja tulostaa käyttäjälle tiedoksi tiedon "Tiedostoon kirjoitettiin:\n [syötetty teksti]".

Kirjoitus tehdään tiedostoon nimeltä "5-2_tiedosto.txt", joka tyhjennetään aina ennen tiedostoon kirjoittamista.

Toimiessaan oikein ohjelma tulostaa vaikkapa seuraavaa:

Example output:

Kirjoita jotain (lopeta lopettaa):
testii
Kirjoita jotain (lopeta lopettaa):
kalle
Kirjoita jotain (lopeta lopettaa):
lopeta
Tiedostoon kirjoitettiin:
testii
kalle

Vastaus

#!/usr/bin/env ruby
# coding: utf-8
sanat = []
tiedosto = "5-2_tiedosto.txt"
# Luodaan tiedosto hallitusti
if (!File.exists?(tiedosto))
begin
# Luodaan tiedosto 0644-tilassa. Kenellekään ei anneta tiedostoon (suoritus/)x-oikeutta.
File.open(tiedosto, File::RDWR|File::CREAT, 0644)
rescue
# Varaudutaan tilanteeseen, jossa käyttäjällä ei ole oikeutta kirjoittaa
# nykyisessä työhakemistossa (PWD)
puts "Tiedostoon #{tiedosto} ei voida kirjoittaa"
Process.exit(1)
end
end
while true
puts "Kirjoita jotain (lopeta lopettaa):"
sana = String(gets.chomp).encode(Encoding::UTF_8)
if sana == "lopeta"
break
else
sanat.insert(-1, sana)
# Tai sanat.push(sana)
end
end
File.open(tiedosto, "w+") do |f|
f.flock(File::LOCK_EX)
sanat.each { |word| f.puts word }
end
puts "Tiedostoon kirjoitettiin:\n" + File.read(tiedosto)
# Tiedosto suljetaan automaattisesti ohjelman päätyttyä.