14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/hash_engine/csv_parse.rb', line 14
def parse_line(line, , delimiter=DEFAULT_DELIMITER)
delimiter = DEFAULT_DELIMITER if delimiter.empty?
result = {:error => []}
unless line.empty?
parse = line.chomp
csv = Array.new
current_field = String.new
field_quotes = 0
parse.split(delimiter, -1).each do |match|
if current_field.empty? && match.count(QUOTE_CHAR).zero?
csv << (match.empty? ? nil : match)
else
current_field << match
field_quotes += match.count(QUOTE_CHAR)
if field_quotes % 2 == 0
in_quotes = current_field[QUOTED_FIELD, 1] || current_field
current_field = in_quotes
current_field.gsub!(QUOTE_CHAR * 2, QUOTE_CHAR)
csv << current_field
current_field = String.new
field_quotes = 0
else
current_field << delimiter
end
end
end
if csv.size == .size
.each_with_index {|name, index| result[name] = csv[index] }
else
result[:error] = ["header.size: #{headers.size} parsed_data.size: #{csv.size}"]
end
end
result
end
|