Ruby Rails Удалить комментарии из CSV - PullRequest
0 голосов
/ 10 января 2020

Я новичок в rails и пытаюсь обработать файл CSV, некоторые файлы будут иметь комментарии в начале файла CSV, комментарии помечены #. Если есть способ, которым я могу удалить эти строки? Мне не нужно просто игнорировать их, поскольку я хочу сохранить файл без комментариев.

образец файла:

#-----------------------
# report --------------
#-----------------------
Date, transctions
20100923, 34
20200110, 56

Спасибо.

Ответы [ 2 ]

4 голосов
/ 10 января 2020

Библиотека CSV имеет опции skip_lines:

При установке объекта, отвечающего на match, каждая строка, соответствующая ему, считается комментарием и игнорируется во время анализа , Когда задано значение String, оно сначала преобразуется в регулярное выражение. При значении nil ни одна строка не считается комментарием. Если переданный объект не отвечает на match, выдается ArgumentError.

Это должно работать для вас:

CSV.foreach(file, skip_lines: /^#/, headers: true) do |row|
  # ...
end

/^#/ соответствует строкам, начинающимся с #.

1 голос
/ 10 января 2020

Добавление чего-либо к ответу @ Stefan (вся заслуга ему за подсказку skip_lines), при условии, что ваш файл csv input.csv :

require "csv"
CSV.open("output.csv", "wb") do |output_csv|
  CSV.foreach("input.csv", skip_lines: /^#/, headers: true) do |row|
    # ...
    output_csv << row
  end
end

Таким образом, вы получите файл output.csv без этих комментариев.

РЕДАКТИРОВАТЬ: Если вы хотите также заголовок, вы можете сделать:

CSV.open("output.csv", "wb") do |output_csv|
  CSV.foreach("input.csv", skip_lines: /^#/, headers: true).with_index(0) do |row, i|
    output_csv << row.headers if i == 0
    puts row
    output_csv << row
  end
end

... Это не так чисто, как я хочу, но соответствует вашим потребностям;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...