2011-12-06 1 views
2

필자는 csv 파일에서 열 1의 값이 같고 새 csv 파일에서이를 통합하는 열 2에서 열의 모든 uniq 값을 찾으려고합니다. 나는 그렇게 여기에 방법이 혼란 소리 예입니다, 알고더 빠른 CSV + 고유 항목을 찾으려고 시도

원본 파일 foo.csv의 샘플 :

"Boom Lifts","Model Number","Manufacturer","Platform Height","Horizontal Outreach","Lift Capacity" 
"Boom Lifts","Model Number","Platform Height","Horizontal Outreach","Up & Over Height","Platform Capacity" 
"Boom Lifts","Model Number","Platform Height","Horizontal Outreach","Up & Over Height" 
"Pusharound Lifts","Model Number","Manufacturer","Platform Height","Stowed Height" 
"Scissor Lifts","Model Number","Manufacturer","Platform Height","Stowed Height","Overall Dimensions","Platform Extension" 
"Scissor Lifts","Overall Dimensions","Platform Size","Platform Extension","Lift Capacity" 

이상적인 결과 bar.csv :

"Boom Lifts","Model Number","Manufacturer","Platform Height","Horizontal Outreach","Lift Capacity","Up & Over Height","Platform Capacity",,, 
"Pusharound Lifts","Model Number","Manufacturer","Platform Height","Stowed Height" 
"Scissor Lifts","Model Number","Manufacturer","Platform Height","Stowed Height","Overall Dimensions","Platform Size","Platform Extension","Lift Capacity" 

의 각 행의 길이가 다양하고 꽤 큰 파일입니다 (5k 줄 이상). 일치/문자열 조작 방법에 관한 저의 머리를 완전히 긁어 모으고 있습니다. 그리고 네, 그 라인의 일부는 '빈 셀'이있는 곳에 쉼표가 있습니다. 나는 이것을 사용하는 방법이 있다면 더 빠른 CSV를 사용 해왔다.

포인터? 내 mbp가 눈부신 중지에 오지 않는 것이 좋습니다.

[ 
    ["Boom Lifts", "Model Number", "Manufacturer", "Platform Height", "Horizontal Outreach", "Lift Capacity", "Up & Over Height", "Platform Capacity"] 
    ["Pusharound Lifts", "Model Number", "Manufacturer", "Platform Height", "Stowed Height"] 
    ["Scissor Lifts", "Model Number", "Manufacturer", "Platform Height", "Stowed Height", "Overall Dimensions", "Platform Extension", "Platform Size", "Lift Capacity"] 
] 

이 순간되지 않지만 아래로 MBP를 가져 오지해야합니다

a = [ 
    ["Boom Lifts","Model Number","Manufacturer","Platform Height","Horizontal Outreach","Lift Capacity"] 
    ["Boom Lifts","Model Number","Platform Height","Horizontal Outreach","Up & Over Height","Platform Capacity"] 
    ["Boom Lifts","Model Number","Platform Height","Horizontal Outreach","Up & Over Height"] 
    ["Pusharound Lifts","Model Number","Manufacturer","Platform Height","Stowed Height"] 
    ["Scissor Lifts","Model Number","Manufacturer","Platform Height","Stowed Height","Overall Dimensions","Platform Extension"] 
    ["Scissor Lifts","Overall Dimensions","Platform Size","Platform Extension","Lift Capacity"] 
] 

a.group_by {|e| e[0]}.map {|e| e.flatten.uniq} 

는 가져옵니다

+0

그래서 첫 번째 열을 키로 처리 할 수 ​​있으며 b) 모든 후속 열을 목록에서 값으로 처리 할 수 ​​있습니다. 결국이 목록에 고유 한 값이 포함되기를 원합니다 ...? bar.csv의 마지막 행은 "전체 차원"및 "플랫폼 확장"을 반복합니다. 반복되는 값은 괜찮습니까? – buruzaemon

+0

나쁘고, 과장된 차원과 플랫폼 확장을 반복해서는 안됩니다. 더 빠른 CSV를 사용하여 하나의 파일 foo.csv를 읽고 다른 bar.csv를 뱉어 내고 싶습니다. 감사. – MarkL

답변

1

당신이 빠른 CSV와 2 차원 배열로 그것을 얻을 수 있습니다 가정.