Как удалить повторяющиеся столбцы, используя ruby ​​FasterCSV - PullRequest
1 голос
/ 05 апреля 2011

Я использую Ruby 1.8 и FasterCSV.

Файл CSV, в котором я читаю, содержит несколько повторяющихся столбцов.

| acct_id | amount | acct_num | color | acct_id | acct_type | acct_num |
|     345 |  12.34 |      123 |   red |     345 | 'savings' |      123 |
|     678 |  11.34 |      432 | green |     678 | 'savings' |      432 |

... и т. Д.

Я бы хотел сжать это до:

| acct_id | amount | acct_num | color | acct_type |
|     345 |  12.34 |      123 |   red | 'savings' |
|     678 |  11.34 |      432 | green | 'savings' |

Есть ли универсальный способ сделать это?

В настоящее время мое решение выглядит примерно так:

headers = CSV.read_line(file)
headers = CSV.read_line # get rid of garbage line between headers and data
FasterCSV.filter(file, :headers => headers) do |row|
  row.delete(6) #delete second acct_num field
  row.delete(4) #delete second acct_id field

  # additional processing on the data
  row['color'] = color_to_number(row['color'])
  row['acct_type'] = acct_type_to_number(row['acct_type'])
end

1 Ответ

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

Если вы хотите избавиться от жестко закодированных удалений

  row.delete(6) #delete second acct_num field
  row.delete(4) #delete second acct_id field

Может быть заменено на

row = row.to_hash

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

...