Это проблема дизайна Ruby. Как создать анализатор плоских файлов многократного использования, который может выполнять различные операции очистки данных для одного вызова, возвращать вызываемые результаты каждой операции очистки вызывающей стороне и выполнять массовые вставки SQL?
Теперь, до того, как кто-нибудь станет наркоман / обеспокоен, я написал этот код уже в очень скудном виде. Вот почему я прошу у любых наших рок-звезд Ruby какую-то помощь.
По сути, каждый раз, когда я хочу выполнить эту логику, я создаю два вложенных цикла с настраиваемой промежуточной обработкой, буферизую каждую обработанную строку в массив и выводим в БД в виде массовой вставки, когда достигается предел размера буфера.
Хотя я написал много помощников, основной шаблон - копирование, вставляемое каждый раз. Не очень СУХОЙ!
Вот пример кода Ruby / Pseudo того, что я повторяю.
lines_from_file.each do |line|
line.match(/some regex/).each do |sub_str|
# Process substring into useful format
# EG1: Simple gsub() call
# EG2: Custom function call to do complex scrubbing
# and matching, emitting results to array
# EG3: Loop to match opening/closing/nested brackets
# or other delimiters and emit results to array
end
# Add processed lines to a buffer as SQL insert statement
@buffer << PREPARED INSERT STATEMENT
# Flush buffer when "buffer size limit reached" or "end of file"
if sql_buffer_full || last_line_reached
@dbc.insert(SQL INSERTS FROM BUFFER)
@buffer = nil
end
end
Я знаком с функциями Proc / Lambda. Однако, поскольку я хочу передать две отдельные процедуры одной функции, я не уверен, что делать дальше. У меня есть представление о том, как решить эту проблему, но мне бы очень хотелось посмотреть, что предлагают настоящие рубиисты?
За вами. Заранее спасибо: D