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