отображение данных файла в разном порядке ... Как это сделать - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь показать данные на экране консоли.Данные будут получены из текстового файла.Я должен отсортировать эту информацию по столбцам, показывающим информацию об отеле

------------------------------------------------------------------
|     Hotel Name     |    Location   |    Cuisines     |  Price  |
------------------------------------------------------------------
 Margarita            New York        Non veg-Veg          $15.32
 Burgundian           London          Veg-Non-veg          $10.50
 Krishna sagar        Bangalore       andhra style         $30.25
 Adan saga            Ayers           north special        $40.12
 Taj                  Hyderbad        Biryani special     $120.78
 Ajanta               Hyderbad        Andhra special       $45.02
 Elora                Yorkshire       Mutton special      $135.45
 Tad banjo            Maine           Chicken Biryani     $120.87
 Tao                  Huston          North special       $100.00
 Punjabi kabi         Spencer marker  Paratha Special       45.78
------------------------------------------------------------------

Как-то я справился с выравниванием, но это неправильный способ отображения.Я не знаю, как выполнить сортировку, потому что, когда я проверяю текстовый файл, каждый элемент данных сохраняется как отдельный объект.

Вот мой код:

module ListHotel
 :sortorder => "HotelName"
 def ListHotel::listing
 puts('Showing Hotel Information')
 getter
 #puts('[Shorting Order]:#{:sortorder}')

 end # end of the Method

  def self.getter
           arr=Array.new
           File.open('Restaurant.txt','r').each { |x| arr << x}
  1.upto 73  do  print('-') end 
  puts "\n" 
  puts %q{|      Hotel Name    |    Location    |     Cuisines |    Price      |}
  1.upto 73  do  print('-') end;puts "\n" 
   i=0
  while i<=arr.length
    print "#{arr[i].chomp rescue nil}\t\t" ;i+=1 
    print "#{arr[i].chomp rescue nil}\t" ;i+=1 
    print "#{arr[i].chomp rescue nil}\t\t" ;i+=1 
    print "#{arr[i].chomp rescue nil}\n" ;i+=1 
  end  #while Ends 
1.upto 73  do  print('-') end;puts "\n" 
     puts"Choose your sorting way"
     puts %q{ :By Hotel Name
              :By Location
              :By Cuisines
              :By Price
            }
 ch=gets.chomp rescue nil
#....
.....
.
....#

  end   #getter

end #end of Module

1 Ответ

1 голос
/ 13 апреля 2011

Отредактировано после комментария от вопросника.

Далее отредактировано после соответствующего вопроса здесь Вопрос

Данные из текста выглядят так:

data = [
  "Margarita", "New York", "Non veg-Veg", 15.32,
  "Burgundian", "London", "Veg-Non-veg", 10.5,
  "Krishna sagar", "Bangalore", "andhra style", 30.25,
  "Adan saga", "Ayers", "north special", 40.12
]

Вы хотите превратить это в массив массива, выполнив следующее:

data = data.each_slice(4).to_a

Данные теперь становятся:

data = [
  ["Margarita", "New York", "Non veg-Veg", 15.32],
  ["Burgundian", "London", "Veg-Non-veg", 10.5],
  ["Krishna sagar", "Bangalore", "andhra style", 30.25],
  ["Adan saga", "Ayers", "north special", 40.12]
]

Если вы хотите отсортировать по цене, учитывая, что иногда это может быть nil:

data.sort_by{|hotel, location, cuisine, price| price.to_f}

# => [
  ["Burgundian", "London", "Veg-Non-veg", 10.5],
  ["Margarita", "New York", "Non veg-Veg", 15.32],
  ["Krishna sagar", "Bangalore", "andhra style", 30.25],
  ["Adan saga", "Ayers", "north special", 40.12]
]

Если вы хотите отсортировать по местоположению, то по цене используйте массив:

data.sort_by{|hotel, location, cuisine, price| [location.to_s, price.to_f]}

# => [
  ["Adan saga", "Ayers", "north special", 40.12],
  ["Krishna sagar", "Bangalore", "andhra style", 30.25],
  ["Burgundian", "London", "Veg-Non-veg", 10.5],
  ["Margarita", "New York", "Non veg-Veg", 15.32]
]

Хорошо, что вы можете выровнять их в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...