Во-первых, имейте в виду, что есть стандарт для файлов CSV. Его часто игнорируют люди, которые пытаются перевернуть свой собственный код, чтобы читать и писать, но стандарт остается. И, используя предварительно созданные колеса, например, the CSV class, который поставляется с Ruby, ваши шансы на создание правильных CSV-данных идут вверх, как и ваши шансы на чтение.
В документации есть примеры, показывающие, как читать и записывать CSV-данные из файлов и из строк, поэтому это отправная точка. Чтение на строки строку за строкой из файла выглядит следующим образом:
CSV.foreach("path/to/file.csv") do |row|
# use row here...
end
так читать ваши данные:
require 'csv'
CSV.foreach("test.csv") do |row|
puts row.reverse.join(' ')
end
Запуск выводит:
James Jones
Violet Williams
Briggs Walton
Вы хотите читать CSV строку -by-line большую часть времени, потому что вас беспокоит только одна строка. Дампы базы данных часто бывают в формате CSV, и при попытке до read
весь файл дампа огромной базы данных сразу («раздвоение») может отменить вашу программу.
Теперь некоторые комментарии о коде:
TransferInformation
не хорошее имя для класса. Класс должен быть таким, как «IncomingData», «Data» или «UserNames» или «Names». Методы - это действия или глаголы.
Вы не можете сказать
read_seed_data_from_file(seed)
потому, что метод является частью класса передачи информации. Вам нужно создать экземпляр класса, то вы можете вызвать метод:
ta = TransferInformation.new
ta.read_seed_data_from_file('test.csv')
Это выглядит правильно, но не был проверен.
Когда я вынимаю require_relative и меняю seed.rb на seed.csv, а затем запускаю ruby code.rb в консоли, теперь получаю - неопределенную локальную переменную или метод «семя». –
'read_seed_data_from_file (" seed.cvs ")'. 'seed' будет переменной, и это, как говорит ошибка, не определено. – Amadan
удивительный. Спасибо. и затем я запускаю этот «ruby -r» ./code.rb «-e» TransferInformation.new.read_seed_data_from_file («seed.csv») «из командной строки, и он отлично работает. –