Spec-Zone.ru › Ruby 2.2

класс CSV::Row

Родитель:
Object
Включенные модули:
Enumerable

Объект CSV::Row — это комбинация массива и хэша. Он сохраняет порядок полей и допускает дубликаты, как массив, но также позволяет получать доступ к полям по имени, как если бы они были в хэше.

Все строки, возвращаемые объектом CSV, будут созданы с использованием этого класса, если обработка заголовков включена.

Атрибуты

row[R]

Внутренний формат данных, используемый для сравнения на равенство.

Публичные методы класса

new(headers, fields, header_row = false) Показать исходный код
# File lib/csv.rb, line 235
def initialize(headers, fields, header_row = false)
  @header_row = header_row
  headers.each { |h| h.freeze if h.is_a? String }

  # handle extra headers or fields
  @row = if headers.size >= fields.size
    headers.zip(fields)
  else
    fields.zip(headers).map { |pair| pair.reverse! }
  end
end

Создаёт новый объект CSV::Row из headers и fields, которые должны быть массивами. Если один массив короче другого, он будет дополнен nil объектами.

Необязательный параметр header_row может быть установлен в true для указания, что это строка заголовков, с помощью #header_row? и #field_row?. В противном случае строка предполагается как строка данных.

Объект CSV::Row поддерживает следующие методы массива через делегирование:

  • empty?()

  • length()

  • size()

Публичные методы экземпляра

<<( field ) Показать исходный код
<<( header_and_field_array )
<<( header_and_field_hash )
# File lib/csv.rb, line 376
def <<(arg)
  if arg.is_a?(Array) and arg.size == 2  # appending a header and name
    @row << arg
  elsif arg.is_a?(Hash)                  # append header and name pairs
    arg.each { |pair| @row << pair }
  else                                   # append field value
    @row << [nil, arg]
  end

  self  # for chaining
end

Если предоставлен двумерный массив, предполагается, что это заголовок и поле, и пара добавляется. Hash работает аналогично, где ключ является заголовком, а значение — полем. Всё остальное считается отдельным полем, которое добавляется с заголовком nil.

Этот метод возвращает строку для цепочки вызовов.

==(other) Показать исходный код
# File lib/csv.rb, line 513
def ==(other)
  return @row == other.row if other.is_a? CSV::Row
  @row == other
end

Возвращает true, если эта строка содержит те же заголовки и поля в том же порядке, что и other.

[](header_or_index, minimum_index = 0)
Псевдоним для: field
[]=( header, value ) Показать исходный код
[]=( header, offset, value )
[]=( index, value )
# File lib/csv.rb, line 343
def []=(*args)
  value = args.pop

  if args.first.is_a? Integer
    if @row[args.first].nil?  # extending past the end with index
      @row[args.first] = [nil, value]
      @row.map! { |pair| pair.nil? ? [nil, nil] : pair }
    else                      # normal index assignment
      @row[args.first][1] = value
    end
  else
    index = index(*args)
    if index.nil?             # appending a field
      self << [args.first, value]
    else                      # normal header assignment
      @row[index][1] = value
    end
  end
end

Ищет поле по семантике, описанной в #field, и присваивает value.

Присваивание за пределами конца строки с помощью индекса установит все пары между [nil, nil]. Присваивание неиспользуемому заголовку добавляет новую пару.

delete( header ) Показать исходный код
delete( header, offset )
delete( index )
# File lib/csv.rb, line 411
def delete(header_or_index, minimum_index = 0)
  if header_or_index.is_a? Integer                 # by index
    @row.delete_at(header_or_index)
  elsif i = index(header_or_index, minimum_index)  # by header
    @row.delete_at(i)
  else
    [ ]
  end
end

Используется для удаления пары из строки по header или index. Пара находится, как описано в #field. Удалённая пара возвращается, или nil, если пара не найдена.

delete_if(&block) Показать исходный код
# File lib/csv.rb, line 428
def delete_if(&block)
  @row.delete_if(&block)

  self  # for chaining
end

Предоставленный block передаётся заголовок и поле для каждой пары в строке, и ожидается, что он вернёт true или false, в зависимости от того, следует ли удалять пару.

Этот метод возвращает строку для цепочки вызовов.

each(&block) Показать исходный код
# File lib/csv.rb, line 503
def each(&block)
  @row.each(&block)

  self  # for chaining
end

Выдаёт каждую пару строки в виде кортежей заголовок-поле (подобно итерации по Hash).

Поддержка для Enumerable.

Этот метод возвращает строку для цепочки вызовов.

fetch( header ) Показать исходный код
fetch( header ) { |row| ... }
fetch( header, default )
# File lib/csv.rb, line 306
def fetch(header, *varargs)
  raise ArgumentError, "Too many arguments" if varargs.length > 1
  pair = @row.assoc(header)
  if pair
    pair.last
  else
    if block_given?
      yield header
    elsif varargs.empty?
      raise KeyError, "key not found: #{header}"
    else
      varargs.first
    end
  end
end

Этот метод получит значение поля по header. Он имеет то же поведение, что и Hash#fetch: если есть поле с заданным header, возвращается его значение. В противном случае, если предоставлен блок, он передаётся header, и возвращается его результат; если в качестве второго аргумента задано default, оно возвращается; в противном случае возникает KeyError.

field( header ) Показать исходный код
field( header, offset )
field( index )
# File lib/csv.rb, line 284
def field(header_or_index, minimum_index = 0)
  # locate the pair
  finder = header_or_index.is_a?(Integer) ? :[] : :assoc
  pair   = @row[minimum_index..-1].send(finder, header_or_index)

  # return the field if we have a pair
  pair.nil? ? nil : pair.last
end

Этот метод вернёт значение поля по header или index. Если поле не найдено, возвращается nil.

При предоставлении, offset гарантирует, что совпадение заголовка происходит в индексе offset или позже. Вы можете использовать это для поиска дубликатов заголовков, не прибегая к жёсткому кодированию точных индексов.

Также является псевдонимом для: []
field?(data) Показать исходный код
# File lib/csv.rb, line 489
def field?(data)
  fields.include? data
end

Возвращает true, если data совпадает с полем в этой строке, и false в противном случае.

field_row?() Показать исходный код
# File lib/csv.rb, line 262
def field_row?
  not header_row?
end

Возвращает true, если это строка поля.

fields(*headers_and_or_indices) Показать исходный код
# File lib/csv.rb, line 442
def fields(*headers_and_or_indices)
  if headers_and_or_indices.empty?  # return all fields--no arguments
    @row.map { |pair| pair.last }
  else                              # or work like values_at()
    headers_and_or_indices.inject(Array.new) do |all, h_or_i|
      all + if h_or_i.is_a? Range
        index_begin = h_or_i.begin.is_a?(Integer) ? h_or_i.begin :
                                                    index(h_or_i.begin)
        index_end   = h_or_i.end.is_a?(Integer)   ? h_or_i.end :
                                                    index(h_or_i.end)
        new_range   = h_or_i.exclude_end? ? (index_begin...index_end) :
                                            (index_begin..index_end)
        fields.values_at(new_range)
      else
        [field(*Array(h_or_i))]
      end
    end
  end
end

Этот метод принимает любое количество аргументов, которые могут быть заголовками, индексами, диапазонами любого из них или двумерными массивами, содержащими заголовок и смещение. Каждый аргумент будет заменён поиском поля, как описано в #field.

Если вызывается без аргументов, возвращаются все поля.

Также является псевдонимом для: values_at
has_key?(header) Показать исходный код
# File lib/csv.rb, line 323
def has_key?(header)
  !!@row.assoc(header)
end

Возвращает true, если есть поле с заданным header.

Также является псевдонимом для: include?, key?, member?
header?(name) Показать исходный код
# File lib/csv.rb, line 480
def header?(name)
  headers.include? name
end

Возвращает true, если name является заголовком для этой строки, и false в противном случае.

Также является псевдонимом для: include?
header_row?() Показать исходный код
# File lib/csv.rb, line 257
def header_row?
  @header_row
end

Возвращает true, если это строка заголовка.

headers() Показать исходный код
# File lib/csv.rb, line 267
def headers
  @row.map { |pair| pair.first }
end

Возвращает заголовки этой строки.

include?(header)
Псевдоним для: has_key?
index( header ) Показать исходный код
index( header, offset )
# File lib/csv.rb, line 472
def index(header, minimum_index = 0)
  # find the pair
  index = headers[minimum_index..-1].index(header)
  # return the index at the right offset, if we found one
  index.nil? ? nil : index + minimum_index
end

Этот метод вернёт индекс поля с предоставленным header. offset может использоваться для поиска дубликатов имён заголовков, как описано в #field.

inspect() Показать исходный код
# File lib/csv.rb, line 538
def inspect
  str = ["#<", self.class.to_s]
  each do |header, field|
    str << " " << (header.is_a?(Symbol) ? header.to_s : header.inspect) <<
           ":" << field.inspect
  end
  str << ">"
  begin
    str.join('')
  rescue  # any encoding error
    str.map do |s|
      e = Encoding::Converter.asciicompat_encoding(s.encoding)
      e ? s.encode(e) : s.force_encoding("ASCII-8BIT")
    end.join('')
  end
end

Краткое описание полей по заголовкам в совместимой с ASCII строке.

key?(header)
Псевдоним для: has_key?
member?(header)
Псевдоним для: has_key?
push(*args) Показать исходный код
# File lib/csv.rb, line 395
def push(*args)
  args.each { |arg| self << arg }

  self  # for chaining
end

Сокращение для добавления нескольких полей. Эквивалентно:

args.each { |arg| csv_row << arg }

Этот метод возвращает строку для цепочки вызовов.

to_csv(options = Hash.new) Показать исходный код
# File lib/csv.rb, line 532
def to_csv(options = Hash.new)
  fields.to_csv(options)
end

Возвращает строку в формате CSV. Заголовки не используются. Эквивалентно:

csv_row.fields.to_csv( options )
Также используется как: to_s
to_hash() Показать исходный код
# File lib/csv.rb, line 522
def to_hash
  # flatten just one level of the internal Array
  Hash[*@row.inject(Array.new) { |ary, pair| ary.push(*pair) }]
end

Преобразует строку в простой словарь. Обратите внимание, что порядок полей игнорируется, а дублирующие поля перезаписываются.

to_s(options = Hash.new)
Псевдоним для: to_csv
values_at(*headers_and_or_indices)
Псевдоним для: fields

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API