2011-10-25 3 views
1

\n의 일부로 인해 형식이 잘못된 .csv 파일이 있습니다. 예컨대는 :여분을 제거하는 루비 정규식

Name,Comment 
"Peter","Good morning" 
"Paul","How are you 
" 
"Mary","Fine" 

제 2 행은 원치 않는 여분의 \n로 끝납니다.

꼬리표 \n 다음에 큰 따옴표가 표시되지 않습니다. " (전체 파일을 이미 문자열로 읽었다 고 가정)?

답변

5

문자열 전체를 읽지 말고 표준 CSV parser in 1.9을 사용하여 읽으십시오.

require 'csv' 
data = CSV.open('pancakes.csv').map { |r| r.map(&:strip) } 
# or 
data = CSV.open('pancakes.csv').map { |r| r.map(&:chomp) } 

는 그런 다음 data이있을 것이다 : 당신이 다음 pancakes.csv, 말,에있는 것을있는 경우
[ 
    ["Name", "Comment"], 
    ["Peter", "Good morning"], 
    ["Paul", "How are you"], 
    ["Mary", "Fine"] 
] 

그래서 당신은 당신의 데이터가 모두 깨끗하고 잘 아주 간단하게 해석 얻을 수 있습니다. 그리고 만약 당신이 CSV를 정리해서 개조 된 개행 문자를 처리 할 수없는 다른 프로그램을 만들 필요가 있다면, CSV를 사용하여 그것을 다시 쓸 수 있습니다.

+0

어떤 이유로 나는 1.8.7에 머무르고'fastercsv'를 사용해야합니다. 'fastercsv'와 비슷한가요? 감사! – ohho

+0

@ohho : AFAIK 1.9의'csv'는 유니 코드 패치가있는'fastercsv'에 불과하므로 1.8에서'fastercsv'와 똑같이 작동해야합니다. –

+0

그것은'FasterCSV.foreach'와 같은 오류를줍니다. 즉,'FasterCSV :: MalformedCSVError (FasterCSV :: MalformedCSVError)' – ohho

-1

큰 따옴표로 끝나지 않는 행에 후행 큰 따옴표를 추가하고 빈 줄 (큰 따옴표 만있는 행)을 제거하지 않는 이유는 무엇입니까?

-1

Regexp가 필요하지 않습니다. 그것은 기본적으로 그 자체의 모든 이중 따옴표입니다 :

csv_string.gsub("\n\"\n", "\"\n") 
+0

Downvoted? Harsh :) – d11wtq