2011-04-05 3 views
1

Ruby 1.8 및 FasterCSV를 사용하고 있습니다.루비를 사용하여 반복되는 열을 제거하는 방법 FasterCSV

내가 읽고있는 csv 파일에는 여러 개의 반복되는 열이 있습니다.

| acct_id | amount | acct_num | color | acct_id | acct_type | acct_num | 
|  345 | 12.34 |  123 | red |  345 | 'savings' |  123 | 
|  678 | 11.34 |  432 | green |  678 | 'savings' |  432 | 

... 등

내가 그것을 응축하고 싶습니다

:이 작업을 수행하는 범용 방법은

| acct_id | amount | acct_num | color | acct_type | 
|  345 | 12.34 |  123 | red | 'savings' | 
|  678 | 11.34 |  432 | green | 'savings' | 

거기가?

row = row.to_hash 

이 중복 소지품 의지는

row.delete(6) #delete second acct_num field 
    row.delete(4) #delete second acct_id field 

교체 할 수있는 하드 삭제를 제거 할 가정

headers = CSV.read_line(file) 
headers = CSV.read_line # get rid of garbage line between headers and data 
FasterCSV.filter(file, :headers => headers) do |row| 
    row.delete(6) #delete second acct_num field 
    row.delete(4) #delete second acct_id field 

    # additional processing on the data 
    row['color'] = color_to_number(row['color']) 
    row['acct_type'] = acct_type_to_number(row['acct_type']) 
end 
+1

당신이 일하지 않은 것은 무엇입니까? –

+0

작동하지만 우아한 것은 아닙니다. 예 : 다른 인덱스를 가진 다른 테이블에서 비슷한 문제가 있습니다. – mkirk

답변

1

:

현재 내 솔루션은 같은입니다 . 게시 된 나머지 코드는 계속 작동합니다.

+0

하지만 해시의 요소가 반드시 행의 요소와 동일한 순서로 있지는 않습니다. 이것은 필드가 헤더와 일치하지 않기 때문에 결과를 출력하려고 할 때 문제가 발생합니다. – mkirk

+0

Ruby 1.9에서는 동일한 순서로 나타납니다. 1.8.6의 경우 출력을 수동으로 지정해야합니다. 이유를 무시하는 것에 동의합니다. – steenslag