Otworzenie zewnętrznego pliku i zapisanie wyniku do pliku.

1

Napisałem program, który ma pobierać dane z zewnętrznego pliku zdefiniowanego jako temp.dat

puts "Odczytywanie wartości tempertatury w stopniach Celsjusza z pliku danych..."
num = File.read("temp.dat")
celsius = num.to_i
fahrenheit = (celsius * 9 / 5) + 32
puts "Liczba to " + num
print "Wynik: "
puts fahrenheit

Po wpisaniu w konsoli systemowej ścieżki pliku pokazuje mi błąd http://fotowrzut.pl/WB20S8K4H1

Drugi program, który będzie zapisywał wynik w pliku:

print "Witaj. Proszę podać wartość w stopniach Celsjusza: "
celsius = gets.to_i
fahrenheit = (celsius * 9 / 5) + 32
puts "Zapisywanie wyniku w pliku danych wyjsciowych temp.out"
fh = File.new ("temp.out" . "w")
fh.puts fahrenheit
fh.close

I podobny problem.

1

Mylisz przecinek z kropką

0

Problem z zapisywaniem pliku rozwiązany, pozostał jedynie z otworzeniem pliku próbowałem już na wiele sposobów. Próbowałem też kod zapisać w inny sposób przedstawiony na innych stronach i dalej program nie widzi tego pliku.

0

A nie możesz zapisywać i odczytywać z pliku "txt"? Pierwsze raz słysze

0

Tu raczej nie o to chodzi. Problem jest z otworzeniem pliku, mianowicie teraz zauważyłem, że gdy klikam w program na pulpicie pokazuje się i znika, to co mogę z niego na szybko odczytać zgadza się z tym co ma on w efekcie zwrócić (pobiera wartość z pliku). Natomiast, gdy chce wywołać ten program przez konsolę to pokazuje mi komunikat z błędem

0

Zmień jeszcze kropke na przecinek i zobacz czy wtedy działa.

0

Spróbuj najpierw tylko odczytać sam plik, czy cokolwiek wypisuje

num = IO.readlines("stopnie.txt")
num.each {|line| puts line.chomp}
0
puts "Liczba to " + num
 

Zmień te linijke na

puts "Liczba to ", num.readline

żeby nie znikało dodaj na końcu programu np.

gets

i sprawdź czy to coś dało

0

Zrobiłem tak

puts "Odczytywanie wartości tempertatury w stopniach Celsjusza z pliku danych..."
num = File.read("stopnie.txt")
celsius = num.to_i
fahrenheit = (celsius * 9 / 5) + 32
puts "Liczba to " + num 
print "Wynik: "
puts fahrenheit
**gets**

Dopisałem gets na końcu i program odpalony z pulpitu się nie zamyka.

Z odpaleniem przez wiersz polecenia nadal problem.

0

Mi to się uruchamia bez błędów i nie znika, ale ja mam RubyMine. To troche dziwne bo powinno ci to działać nawet na konsoli. Wklej screena jakie wyskakują błędy.

1

Spróbuj podać pełną ścieżke do pliku np. "C:/temp.txt". Najlepiej go umieść bezpośrednio na dysku C żeby nie komplikować tej ścieżki.

0

Uruchomiłem dzisiaj ten program w konsoli i działa prawidłowo. Nic nie znika nawet bez dodawania gets. Może ty w ogóle nie uruchamiałeś konsoli tylko co innego? Bo konsola po zakończeniu działania tego programu nie ma prawa zniknąć.

Popraw sobie zapis

print "Witaj. Proszę podać wartość w stopniach Celsjusza: "
celsius = gets.to_i
fahrenheit = (celsius * 9 / 5) + 32
puts "Zapisywanie wyniku w pliku danych wyjsciowych temp.txt"
fh = File.new("C:/temp", "w")
fh.print fahrenheit
fh.close

i odczyt

puts "Odczytywanie wartości temperatury w stopniach Celsjusza z pliku danych..."
num = File.open("C:/temp.txt")
celsius = num.readline.to_i
fahrenheit = (celsius * 9 /5) + 32
puts "Liczba to: " + celsius.to_s
print "Wynik: ", fahrenheit
0

I jak działa? Jakiego masz Windowsa? Przy zapisie ścieżka powinna być oczywiście

fh = File.new("C:/temp.txt", "w")

a nie bez "txt" jak napisałem.

0

Ogólnie to się okazało, że książkę, którą kupiłem http://helion.pl/ksiazki/ruby-przewodnik-programisty-wydanie-ii-david-a-black,rubprp.htm to masa błędów i tyle, zamiast kropek to przecinki i na odwrót.

Zanim odłożę tą książkę, mam prośbę mógłbyś przejrzeć poniższy kod i sprawdzić czy działa u Ciebie

ticket = Object.new 
def ticket.data 
	"01/02/02"
end
def ticket.venue 
	"Sala Miejska"
end
def ticket.event
	"Wieczór literacki autora"
def ticket.performer
	"Mark Twain"
end
def ticket.seat
	"Balkon drugi. rząd J, miejsce 12"
end
def ticket.price 
	5.50
end
print "Bilet na wydarzenie: "
print ticket.event + ". Miejsce: "
print ticket.venue + ". Data: "
puts ticket.data + "."
print "wykonawca: "
puts ticket.performer + "."
print "Miejsce: "
print ticket.seat + "."
print "Cena: "
puts "%.2f." % ticket.price

U mnie nie działa. Jaką komendę (kod) powinienem umieścić na dole tego kodu, aby go wywołać?

Wcześniej miałem problem z wywołaniem obiektu do poniższego kodu:

def obj.talk
puts "Jestem obiektem."
puts "(Czy jesteś obiektem?)"
end

na innym forum ktoś zalecił wykonać to tak, co oczywiście zadziałało

class SampleObject
  def talk
    puts "Jestem obiektem."
    puts "(Czy jesteś obiektem?)"
  end
end

obj = SampleObject.new
obj.talk

Natomiast w tej książce nie było dwóch poniższych linii kodu ani nic co wywołało by ten obiekt.

Przy czym dowiedziałem się, że posługiwanie klasą "Object jest główną klasą w Ruby po której dziedziczą inne klasy, więc nie powinno się jej ruszać (taki dopisywanie metod do klas z core Ruby nazywa się monkey-patching i już dawno temu zostało uznane przez większość osób za złą praktykę)."

0

Nie jestem teraz na kompie więc nie sprawdze ale ten przykład ci prawdopodobnie "nie działa" bo nie wywołujesz jakiejś metody na utworzonym obiekcie. Powinieneś na końcu dopisać np. "ticket.ticket.data" żeby wywołać metode "ticket.data" na obiekcie "ticket"

0

Właściwie wystarczy dopisać "ticket.data".

0

Dokładniej przeglądając kod to jednak nie ma prawa się skompilować. Ja bym jednak odradzał tę książkę :)

0

Rozwiązałem problem

ticket = Object.new
def ticket.date 
"01/05/2006"
end
def ticket.venue 
"Sala miejska"
end
def ticket.event
"Wieczór literacki autora"
end
def ticket.performer
"Mark Twain"
end
def ticket.seat
"Balkon drugi, rząd J, miejsce 12"
end
def ticket.price 
5.50
end
print "Bilet na wydarzenie: "
print ticket.venue + ". Miejsce: " 
print ticket.venue + ". Data: "
puts ticket.date + "."
print "Wykonawca: "
puts ticket.performer + "."
print "Miejsce: "
print ticket.seat + "."
print "Cena: "
puts "$.2f." % ticket.price
ticket.date 

i drugim sposobem i też działa

puts "Bilet na wydarzenie: #{ticket.event}. Miejsce: #{ticket.venue}." + 
"Wykonawca: #{ticket.performer}. " +
"Miejsce: #{ticket.seat}. " + 
"Cena: $#{"%.2f." % ticket.price}"
ticket.date

1 użytkowników online, w tym zalogowanych: 0, gości: 1