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.

120 lines
2.5 KiB

4 years ago
  1. ## 2 Tiedoston järjesteleminen
  2. **Tehtävä:**
  3. 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.
  4. 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.
  5. Jos oletetaan, että käsiteltävän tiedoston sisältö on seuraavanlainen:
  6. ```
  7. kivitasku
  8. nakki
  9. suihkuturbiini
  10. aapinen
  11. avantgarde
  12. lakana
  13. zylofoni
  14. celsius
  15. byrokraatti
  16. lukihäriö
  17. mustikka
  18. magneetti
  19. kolikko
  20. avantgarde
  21. lakana
  22. zylofoni
  23. celsius
  24. koivu
  25. lusikka
  26. kahvikuppi
  27. salama
  28. kotelo
  29. puhelin
  30. avaimet
  31. lukihäriö
  32. kahvikuppi
  33. kahvikuppi
  34. kahvikuppi
  35. kahvikuppi
  36. aapinen
  37. ```
  38. ... on siitä tuotettu siistitty ja suodatettu versio seuraavanlainen:
  39. ```
  40. aapinenaapinen
  41. avaimet
  42. avantgarde
  43. byrokraatti
  44. celsius
  45. kahvikuppi
  46. kivitasku
  47. koivu
  48. kolikko
  49. kotelo
  50. lakana
  51. lukihäriö
  52. lusikka
  53. magneetti
  54. mustikka
  55. nakki
  56. puhelin
  57. salama
  58. suihkuturbiini
  59. zylofoni
  60. ```
  61. Example output:
  62. ```
  63. ```
  64. **Vastaus**
  65. ```
  66. #!/usr/bin/env ruby
  67. # coding: utf-8
  68. tiedostoIn = "7-2a_tiedosto.txt"
  69. tiedostoOut = "7-2b_tiedosto.txt"
  70. if (!File.exists?(tiedostoIn))
  71. begin
  72. File.open(tiedostoIn, File::RDWR|File::CREAT, 0644)
  73. rescue
  74. puts "Tiedostoon #{tiedostoIn} ei voida kirjoittaa"
  75. Process.exit(1)
  76. end
  77. end
  78. def kirjoita(tiedosto, sanat)
  79. File.open(tiedosto, "w+:UTF-8") do |f|
  80. f.flock(File::LOCK_EX)
  81. sanat.each { |sana| f.puts sana }
  82. end
  83. end
  84. 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"])
  85. ###############################
  86. def jarjestaRivit(tiedostoLahde, tiedostoTulos)
  87. sanalista = []
  88. if (File.readable?(tiedostoLahde))
  89. File.foreach(tiedostoLahde) do |line|
  90. sanalista.insert(-1, line
  91. end
  92. end
  93. kirjoita(tiedostoTulos, sanalista.sort.uniq)
  94. end
  95. jarjestaRivit(tiedostoIn, tiedostoOut)
  96. ```