## 2 Tiedoston järjesteleminen **Tehtävä:** Luvun toisessa tehtävässä Työskellään tiedostojen kanssa ja tehdään yksinkertainen suodatin joka läpikäy tiedoston sisällön, järjestelee sen ja poistaa sieltä turhat merkinnät. Tee ohjelma, joka lukee tiedostosta "7-2a_tiedosto.txt" listan sanoja, joita on aina yksi per rivi. Nämä sanat voivat olla mitä tahansa, ja ne saattaa esiintyä tiedostossa useaan kertaan. Tee ohjelma, joka lukee listan, poistaa sieltä kaikki ylimääräiset, useampaan kertaan olevat alkiot (1 kpl jätetään talteen), lajittelee sanat aakkosjärjestykseen ja tulostaa tuloksen tiedostoon "7-2b_tiedosto.txt". Toimiessaan oikein ohjelma ei tulosta mitään. Jos oletetaan, että käsiteltävän tiedoston sisältö on seuraavanlainen: ``` kivitasku nakki suihkuturbiini aapinen avantgarde lakana zylofoni celsius byrokraatti lukihäriö mustikka magneetti kolikko avantgarde lakana zylofoni celsius koivu lusikka kahvikuppi salama kotelo puhelin avaimet lukihäriö kahvikuppi kahvikuppi kahvikuppi kahvikuppi aapinen ``` ... on siitä tuotettu siistitty ja suodatettu versio seuraavanlainen: ``` aapinenaapinen avaimet avantgarde byrokraatti celsius kahvikuppi kivitasku koivu kolikko kotelo lakana lukihäriö lusikka magneetti mustikka nakki puhelin salama suihkuturbiini zylofoni ``` Example output: ``` ``` **Vastaus** ``` #!/usr/bin/env ruby # coding: utf-8 tiedostoIn = "7-2a_tiedosto.txt" tiedostoOut = "7-2b_tiedosto.txt" if (!File.exists?(tiedostoIn)) begin File.open(tiedostoIn, File::RDWR|File::CREAT, 0644) rescue puts "Tiedostoon #{tiedostoIn} 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 { |sana| f.puts sana } end end kirjoita(tiedostoIn, ["kivitasku", "nakki", "suihkuturbiini", "aapinen", "avantgarde", "lakana", "zylofoni", "celsius", "byrokraatti", "lukihäriö", "mustikka", "magneetti", "kolikko", "avantgarde", "lakana", "zylofoni", "celsius", "koivu", "lusikka", "kahvikuppi", "salama", "kotelo", "puhelin", "avaimet", "lukihäriö", "kahvikuppi", "kahvikuppi", "kahvikuppi", "kahvikuppi", "aapinen"]) ############################### def jarjestaRivit(tiedostoLahde, tiedostoTulos) sanalista = [] if (File.readable?(tiedostoLahde)) File.foreach(tiedostoLahde) do |line| sanalista.insert(-1, line end end kirjoita(tiedostoTulos, sanalista.sort.uniq) end jarjestaRivit(tiedostoIn, tiedostoOut) ```