Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ruby: Tiettyjen merkkien poisto tekstitiedostosta

Rugber [02.05.2015 16:14:00]

#

Tarvitsisin apua ohjelmassa, joka poistaa tekstitiedosta kaikki merkit, jotka eivät ole joko isoja tai pieniä kirjaimia, välilyöntejä tai rivinvaihtoja. Koodini näyttää tällä hetkellä tältä.

begin
 ohjelma = File.new("tekstitiedosto.txt","r")
 ohjelma = ""
 tiedosto.each{|rivi| ohjelma << rivi }
 tiedosto.close
rescue
 puts "lähdetiedostoa ei ole."
end

hyvatmerkit1 = 65..90
hyvatmerkit2 = 97..122
pituus = ohjelma.length
merkkit = 0
luettava = ""
while merkkit < pituus
  if (hyvatmerkit1.include?(ohjelma[merkkit] )) or (hyvatmerkit2.include?(ohjelma[merkkit]))
    luettava << ohjelma[merkkit].chr
  elsif ohjelma[merkkit].chr == "\n" or ohjelma[merkkit].chr == " "
    luettava << ohjelma[merkkit].chr
  end
  merkkit += 1
end

puts luettava

peran [02.05.2015 16:35:37]

#

En ole koskaan Rubyä ohjelmoinnut, mutta ihmettelen, miksi koodissasi on ?

Rugber kirjoitti:

ohjelma=""

Metabolix [02.05.2015 16:51:05]

#

Sijoitat avaamasi tiedoston väärään muuttujaan, jolloin muuttujaa ”tiedosto” ei ole määritelty ja ohjelma päätyy rescue-lohkoon. Pöljästi ohjelmasi antaa väärän virheilmoituksen, koska teet monta asiaa samassa lohkossa ja oletat, että ainoa virheen paikka olisi tiedoston puuttuminen.

fergusq [02.05.2015 20:52:43]

#

Mielestäni tuo ohjelma ei muutenkaan toimi, sillä ohjelma[merkkit] palauttaa merkkijonon, jota ei tietenkään löydy hyvatmerkit -lukutaulukosta. Rubyssa on ihan oma syntaksi "a".."z" taulukoille, jotka sisältävät merkkejä.

JaskaP [05.05.2015 11:25:59]

#

Toi koodi on sellaista pupellusta ettei ole järkevää korjata.

Jotain tämmöistä kai pitäisi olla:

begin
  File.foreach('test.rb') do |line|
    line.each_char {|c| print c.match(/[[:alpha:],\s]/)}
    # myös ääkköset ym. roska mukana!! :)
  end
rescue Exception => msg
  # display the system generated error message
  puts msg
end

Tulostus kun test.rb on tuo sama koodi:

begin
  Fileforeachtestrb do line
    lineeachchar c print cmatchalpha,s
     myös ääkköset ym roska mukana
  end
rescue Exception  msg
   display the system generated error message
  puts msg
end

Katso tuolta muita mahdollisuuksia tuohon matchiin.

Rugber [05.05.2015 18:35:07]

#

Fergusqin neuvo auttoi. Ohjelma toimii nyt.
Kiitos avusta!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta