2014-12-31 5 views
0

각 줄 바꿈에 대한 배열을 만들 : I 값을 감지하려면 어떻게문자열 : 분할 가치와 나는 (양식 제출에서)이 같은 문자열이

"apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange" 

과에 대한 배열을 생성 텍스트가있는 각 줄? 이처럼 :

a = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange" 
a.gsub("\r", "").each_line.map{|d| d.strip.split(",")}.reject(&:empty?) 

을 ... 그리고 당신은 확실히이 리팩토링 할 수 있습니다 확실히

답변

3
s = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange" 
s.each_line.reject { |l| l =~ /^\s+$/ }.map { |l| l.strip.split(', ') } 

이 작업을 시도 할 수 있습니다. 동일의

+0

데이터는 CSV 데이터처럼 취급되어야한다. 이 경우 쉼표로 임의로 분할하면되지만 쉼표가 포함되어 있으면 실패합니다. –

0

짧은 것이 있습니다

[ 
    ["apple", "banana"], 
    ["cherries"], 
    ["grapes", "blue berries"], 
    ["orange"] 
] 
2

더 :

s.each_line.map { |l| l.strip.split(', ') }.reject(&:empty?) 

루비 재미 물건입니다!

0

시험해보세요.

s = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange" 

result = s.split(/[\r\n]+/).map do |match| 
    next unless match =~ /\w/ 
    match.strip.split(/,\s?/) 
end 

result.compact # => [["apple", "banana"], ["cherries"], ["grapes", "blue berries"], ["orange"]] 

는 간결한 더 나은 경우 :

s.split(/[\r\n]+/).map { |m| next unless m =~ /\w/; m.strip.split(/,\s?/) }.compact 
4
require "csv" 

str = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange" 

rows = CSV.parse(str, skip_blanks: true) 
rows = rows.map{|row| row.map(&:strip)} # remove leading and trailing whitespace 
rows.delete([""]) 

p rows # => [["apple", "banana"], ["cherries"], ["grapes", "blue berries"], ["orange"]] 
관련 문제