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 luettavaEn 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
endTulostus 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
endKatso tuolta muita mahdollisuuksia tuohon matchiin.
Fergusqin neuvo auttoi. Ohjelma toimii nyt.
Kiitos avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.