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
En ole koskaan Rubyä ohjelmoinnut, mutta ihmettelen, miksi koodissasi on ?
Rugber kirjoitti:
ohjelma=""
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.
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ä.
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.
Fergusqin neuvo auttoi. Ohjelma toimii nyt.
Kiitos avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.