Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Помогите разобраться со скриптом конвертера валют

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79442

  • TimkaVs
  • TimkaVs аватар
  • Вне сайта
  • Путник
  • Сообщений: 2
Начал изучение самого языка руби, вот дошёл до практикума, нужно сделать конвертер четырёх валют с помощью case...end
Пишу и проверяю код на Aptana Studio 3.
Начал значит писать код.

puts "Конвертер валют приветствует вас.
Введите интересующую вас валюту. Доллар. Рубль. Евро Гривна"
vib=gets.chomp
case vib
when "Доллар" then
print "10 долларов"
else
print "херня"
end

с кейсом первый раз работаю, поэтому прежде чем писать от и до, я проверил что будет если переменная vib будет равняться "Доллар", по моей идеи должно показать сообщение 10 долларов. Если бы так и было, то вопроса не возникло. Но почему то запуская программу, я пишу Доллар, выдаёт else "херня". Если в when "Доллар" then, "доллар" изменить на "dol", и после запуска программы, ввести dol, то выдаёт нужную строку "10 долларов".
не могу понять в чем ошибка или проблема(
Вложения:
Последнее редактирование: 9 года 1 мес. назад от AnnTenna. Причина: пожалуйста, указывай названия точнее!
Администратор запретил публиковать записи гостям.

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79443

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Программист RubyКоммерсантУчительПроект года 1 местоПроект месяца 1 место
Подозреваю что ты сидишь под руской виндой, и видимо введенный текст будет закодирован в Windows-1251. Твоя же оптана, видимо, работает в utf-8 по умолчанию. Переведи полученную строку в utf-8 - должно помочь.
vib = gets.chomp.encode('utf-8')

P.S. - в руби не обязательно писать then в case и if
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: MaltonTheWarrior

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79444

  • TimkaVs
  • TimkaVs аватар
  • Вне сайта
  • Путник
  • Сообщений: 2
добавил что ты написал, всё равно не работает. Зашёл в настройки, стоит utf-8
Вложения:
Последнее редактирование: 9 года 1 мес. назад от TimkaVs.
Администратор запретил публиковать записи гостям.

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79445

  • TimkaVs
  • TimkaVs аватар
  • Вне сайта
  • Путник
  • Сообщений: 2
Не знаю влияет ли на что нибудь, сижу с windows 10
Администратор запретил публиковать записи гостям.

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79446

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место Учитель3 место Готв
Чтобы вовсе исключить из уравнения кодировку, можно написать:
when 'доллар', 'dollar', '$'

...и попробовать ввести dollar. Если тогда всё сработает как надо - значит, какая-то морока с кодировкой.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79447

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Организатор конкурсовПисатель 3 местоВетеран3 место1 место в ГотвПрограммист RubyУчительПроект месяца 1 местоПроект месяца 2 место
нет, все норм, та же фигня и на другой винде:


пойду копать мануалы по этому поводу.
Администратор запретил публиковать записи гостям.

Помогите разобраться со скриптом конвертера валют 9 года 1 мес. назад #79451

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Программист RubyКоммерсантУчительПроект года 1 местоПроект месяца 1 место
Если запускать руби файл из консоли (под виндой), то строка приходит в IBM866 (консоль винды - она такая, с приветом :) ), и перевод в UTF-8 решает проблему. Подумал, что возможно аптана коряво настроена из коробки, так что пришлось даже ее скачать и поставить и запустить файл уже из под нее. В итоге оказалось, что в Encoding.default_external у нее стоит Windows-1251, что вроде логично. Но на самом же деле, строка в gets приходит уже переведенная в юникод. Строки в руби - это последовательность байтов плюс кодировка. Последовательность байтов приходит как для строки в юникоде, но кодировка стоит неверная.

Есть два решения
Encoding.default_encoding = 'utf-8'
#ИЛИ
s = gets.chop.forse_encoding 'utf-8'
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79, Ren310, TimkaVs
Модераторы: NeKotZima
Время создания страницы: 0.315 секунд