Как вывести только первое значение в строке из CSV-файла в Ruby? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть лист Excel (файл .csv) с lat s и long s для различных местоположений камеры слежения, и я создал программу Ruby, которая использует гемы haversine и geocoder, чтобы найтирасстояние между адресом, который вводит пользователь, и различными местоположениями камеры в файле CSV, затем распечатывает ближайшую камеру по адресу, предоставленному пользователем.

Моя проблема в том, что она распечатывает всю строку информации для ближайшей камеры, и я хотел бы, чтобы она просто распечатывала первое значение в строке (пересечение местоположения ближайшей камеры слежения за дорожным движением).

Файл CSV похож на этот:


Местоположение Широта Долгота Оперативный

Ст.Charles @ Washington Ave.29,93102 -90,086 Y

Итак, мой вопрос, чтобы упростить, как мне заставить его распечатать:

St. Charles @ Washington Ave. is 1.0351466822038633 miles away!

Вместо:

St. Charles @ Washington Ave.,30.015934,-90.075197,Y is 1.0351466822038633 miles away!

Донне нужно выводить дополнительные значения, такие как lat, long и рабочее состояние (Y), только имя пересечения камеры.

Вот фрагмент кода (без указанияслишком много моего кода, в случае, если другие студенты получат такое же задание в будущем и им нужно будет это выяснить самостоятельно):

require 'csv'
require 'haversine'
require 'geocoder'


# ***missing code that does all of the work converting the distance between the given address 
# and the addresses in the .CSV file and finds the closest traffic camera***

min_num = distance #in miles, calculated by Haversine and Geocoder

# reads the line of the CSV file with the shortest distance to the input address and assigns value to the variable 'closest_cam'

closest_cam = CSV.readlines("./cameras.csv", headers: true)[index_num]

# prints the closest camera to the given address and how far away it is (in miles), 
# the problem is that it prints the entire row, with lats, longs, etc. instead of just the name of the closest camera intersection.. ):<        

puts "#{closest_cam} is #{min_num} miles away!"

1 Ответ

0 голосов
/ 26 сентября 2019

puts #{closest_cam[0]} is #{min_num} miles away! Переменная closest_cam - это строка (массив), где каждый столбец является позицией в этом массиве.

Из чтения из модуля CSV (действительно идентичного readlines): https://ruby -doc.org / stdlib-2.6.1 / libdoc / csv / rdoc / CSV.html # method-i-readlines

Выполняет удаление оставшихся строк и возвращает массив массивов.

Итак, все, что вам нужно сделать, это вызвать этот первый столбец в массиве строк: #{closest_cam[0]}, и вы можете вызвать другие столбцы с 1,2, т. Д.

РЕДАКТИРОВАТЬ: Я был бы осторожен, хотя, если у вас есть CSV с большим количеством строк, реальный ответ будет таким: closest_cam на самом деле весь CSV как массив с каждой строкой в ​​качестве позиции в этом массиве в качестве самого массива.

Таким образом, ответ будет closest_cam[0][0] первым [0], чтобы получить первую строку в массиве csv, и вторым [0], чтобы получить первый столбец этой первой строки.

...