ddfreyne/d-parse

View on GitHub
samples/parse-csv

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'd-parse'
require 'pp'

data = <<~DATA
  first_name,last_name,age
  Denis,Defreyne,29
DATA

module Grammar
  extend DParse::DSL

  FIELD = repeat(char_not_in([',', "\n"])).capture
  LINE = intersperse(FIELD, char(',')).select_even
  FILE = seq(intersperse(LINE, char("\n")).select_even, eof).first
end

pp Grammar::FILE.apply(data)