Spec-Zone.ru › Ruby 2.2

класс CSV::Table

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

Класс CSV::Table — это двумерная структура данных для представления документов CSV. Таблицы позволяют работать с данными по строкам или столбцам, манипулировать данными и даже преобразовывать результаты обратно в CSV, если это необходимо.

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

Атрибуты

mode[R]

Текущий режим доступа для индексирования и итерации.

table[R]

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

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

new(array_of_rows) Показать исходный код
# File lib/csv.rb, line 576
def initialize(array_of_rows)
  @table = array_of_rows
  @mode  = :col_or_row
end

Создает новый объект CSV::Table из array_of_rows, которые, как ожидается, являются объектами CSV::Row. Предполагается, что все строки имеют одинаковые заголовки.

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

  • empty?()

  • length()

  • size()

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

<<(row_or_array) Показать исходный код
# File lib/csv.rb, line 774
def <<(row_or_array)
  if row_or_array.is_a? Array  # append Array
    @table << Row.new(headers, row_or_array)
  else                         # append Row
    @table << row_or_array
  end

  self  # for chaining
end

Добавляет новую строку в конец этой таблицы. Вы можете предоставить массив, который будет преобразован в CSV::Row (наследуя заголовки таблицы), или CSV::Row.

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

==(other) Показать исходный код
# File lib/csv.rb, line 853
def ==(other)
  @table == other.table
end

Возвращает true если все строки этой таблицы ==() строки other.

[](index_or_header) Показать исходный код
# File lib/csv.rb, line 690
def [](index_or_header)
  if @mode == :row or  # by index
     (@mode == :col_or_row and index_or_header.is_a? Integer)
    @table[index_or_header]
  else                 # by header
    @table.map { |row| row[index_or_header] }
  end
end

В режиме смешанного доступа по умолчанию этот метод возвращает строки для доступа по индексу и столбцы для доступа по заголовку. Вы можете принудительно задать ассоциацию с индексом, предварительно вызвав #by_col!() или #by_row!().

Столбцы возвращаются как массив значений. Изменение этого массива не влияет на таблицу.

[]=(index_or_header, value) Показать исходный код
# File lib/csv.rb, line 715
def []=(index_or_header, value)
  if @mode == :row or  # by index
     (@mode == :col_or_row and index_or_header.is_a? Integer)
    if value.is_a? Array
      @table[index_or_header] = Row.new(headers, value)
    else
      @table[index_or_header] = value
    end
  else                 # set column
    if value.is_a? Array  # multiple values
      @table.each_with_index do |row, i|
        if row.header_row?
          row[index_or_header] = index_or_header
        else
          row[index_or_header] = value[i]
        end
      end
    else                  # repeated value
      @table.each do |row|
        if row.header_row?
          row[index_or_header] = index_or_header
        else
          row[index_or_header] = value
        end
      end
    end
  end
end

В режиме смешанного доступа по умолчанию этот метод присваивает строки для доступа по индексу и столбцы для доступа по заголовку. Вы можете принудительно задать ассоциацию с индексом, предварительно вызвав #by_col!() или #by_row!().

Строки могут быть установлены в массив значений (который будет наследовать заголовки таблицы) или CSV::Row.

Столбцы могут быть установлены в одно значение, которое копируется в каждую строку столбца, или в массив значений. Массивы значений присваиваются строкам сверху вниз в порядке следования строк. Лишние значения игнорируются, и если массив не имеет значения для каждой строки, дополнительные строки получат nil.

Присваивание существующему столбцу или строке перезаписывает данные. Присваивание новым столбцам создает их в конце таблицы.

by_col() Показать исходный код
# File lib/csv.rb, line 602
def by_col
  self.class.new(@table.dup).by_col!
end

Возвращает дублирующий объект таблицы в режиме столбцов. Это удобно для цепочки вызовов в одном вызове без изменения режима таблицы, но имейте в виду, что этот метод может потреблять значительное количество памяти для больших наборов данных.

Этот метод возвращает дубликат таблицы для цепочки вызовов. Однако не используйте цепочки деструктивных методов (например, []=()) таким образом, так как вы работаете с дубликатом.

by_col!() Показать исходный код
# File lib/csv.rb, line 612
def by_col!
  @mode = :col

  self
end

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

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

by_col_or_row() Показать исходный код
# File lib/csv.rb, line 627
def by_col_or_row
  self.class.new(@table.dup).by_col_or_row!
end

Возвращает дублирующий объект таблицы в смешанном режиме. Это удобно для цепочки вызовов в одном вызове без изменения режима таблицы, но имейте в виду, что этот метод может потреблять значительное количество памяти для больших наборов данных.

Этот метод возвращает дубликат таблицы для цепочки вызовов. Однако не используйте цепочки деструктивных методов (например, []=()) таким образом, так как вы работаете с дубликатом.

by_col_or_row!() Показать исходный код
# File lib/csv.rb, line 639
def by_col_or_row!
  @mode = :col_or_row

  self
end

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

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

by_row() Показать исходный код
# File lib/csv.rb, line 654
def by_row
  self.class.new(@table.dup).by_row!
end

Возвращает дублирующий объект таблицы в режиме строк. Это удобно для цепочки вызовов в одном вызове без изменения режима таблицы, но имейте в виду, что этот метод может потреблять значительное количество памяти для больших наборов данных.

Этот метод возвращает дубликат таблицы для цепочки вызовов. Однако не используйте цепочки деструктивных методов (например, []=()) таким образом, так как вы работаете с дубликатом.

by_row!() Показать исходный код
# File lib/csv.rb, line 664
def by_row!
  @mode = :row

  self
end

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

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

delete(index_or_header) Показать исходный код
# File lib/csv.rb, line 802
def delete(index_or_header)
  if @mode == :row or  # by index
     (@mode == :col_or_row and index_or_header.is_a? Integer)
    @table.delete_at(index_or_header)
  else                 # by header
    @table.map { |row| row.delete(index_or_header).last }
  end
end

Удаляет и возвращает указанный столбец или строку. В режиме смешанного доступа по умолчанию индексы относятся к строкам, а все остальное считается заголовком столбца. Используйте #by_col!() или #by_row!() для принудительного поиска.

delete_if(&block) Показать исходный код
# File lib/csv.rb, line 819
def delete_if(&block)
  if @mode == :row or @mode == :col_or_row  # by index
    @table.delete_if(&block)
  else                                      # by header
    to_delete = Array.new
    headers.each_with_index do |header, i|
      to_delete << header if block[[header, self[header]]]
    end
    to_delete.map { |header| delete(header) }
  end

  self  # for chaining
end

Удаляет любой столбец или строку, для которого блок возвращает true. В режиме смешанного доступа по умолчанию или в режиме строк итерация — это стандартная итерация строк сверху вниз. В режиме столбцов итерация будет yield двухэлементные кортежи, содержащие имя столбца и массив значений для этого столбца.

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

each(&block) Показать исходный код
# File lib/csv.rb, line 842
def each(&block)
  if @mode == :col
    headers.each { |header| block[[header, self[header]]] }
  else
    @table.each(&block)
  end

  self  # for chaining
end

В режиме смешанного доступа по умолчанию или в режиме строк итерация — это стандартная итерация строк сверху вниз. В режиме столбцов итерация будет yield двухэлементные кортежи, содержащие имя столбца и массив значений для этого столбца.

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

headers() Показать исходный код
# File lib/csv.rb, line 674
def headers
  if @table.empty?
    Array.new
  else
    @table.first.headers
  end
end

Возвращает заголовки для первой строки этой таблицы (предполагается, что они соответствуют всем остальным строкам). Для пустых таблиц возвращается пустой массив.

inspect() Показать исходный код
# File lib/csv.rb, line 891
def inspect
  "#<#{self.class} mode:#{@mode} row_count:#{to_a.size}>".encode("US-ASCII")
end

Показывает режим и размер этой таблицы в строке US-ASCII.

push(*rows) Показать исходный код
# File lib/csv.rb, line 791
def push(*rows)
  rows.each { |row| self << row }

  self  # for chaining
end

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

rows.each { |row| self << row }

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

to_a() Показать исходный код
# File lib/csv.rb, line 861
def to_a
  @table.inject([headers]) do |array, row|
    if row.header_row?
      array
    else
      array + [row.fields]
    end
  end
end

Возвращает таблицу как массив массивов. Заголовки будут первой строкой, а затем последуют все строки полей.

to_csv(options = Hash.new) Показать исходный код
# File lib/csv.rb, line 878
def to_csv(options = Hash.new)
  wh = options.fetch(:write_headers, true)
  @table.inject(wh ? [headers.to_csv(options)] : [ ]) do |rows, row|
    if row.header_row?
      rows
    else
      rows + [row.fields.to_csv(options)]
    end
  end.join('')
end

Возвращает таблицу как полную строку CSV. Заголовки будут указаны первыми, а затем все строки полей.

Этот метод предполагает, что вам нужны #headers, если вы явно не передадите :write_headers => false.

Также является псевдонимом для: to_s
to_s(options = Hash.new)
Псевдоним для: to_csv
values_at(*indices_or_headers) Показать исходный код
# File lib/csv.rb, line 753
def values_at(*indices_or_headers)
  if @mode == :row or  # by indices
     ( @mode == :col_or_row and indices_or_headers.all? do |index|
                                  index.is_a?(Integer)         or
                                  ( index.is_a?(Range)         and
                                    index.first.is_a?(Integer) and
                                    index.last.is_a?(Integer) )
                                end )
    @table.values_at(*indices_or_headers)
  else                 # by headers
    @table.map { |row| row.values_at(*indices_or_headers) }
  end
end

По умолчанию в смешанном режиме список индексов обрабатывается как доступ к строкам, возвращая указанные строки. Всё остальное рассматривается как доступ к столбцам. При доступе к столбцам возвращаемый набор содержит массив для каждой строки, содержащий значения, указанные в заголовках в каждом массиве. Вы можете принудительно задать режим столбцов или строк, используя #by_col!() или #by_row!().

Смешанный доступ к столбцам и строкам невозможен.

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