2012-07-16 4 views
3

내 질문은 this과 비슷합니다. 기본적으로 CSV 파일하지만 중복의 PID와 함께,하지만 나는이 같은 .uniq을 수행 할 수 없습니다 선이 다른Ruby의 열 기반 중복 제거

File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq } 

때문이다. Ruby를 처음 접했고 첫 번째 열을 기반으로 전체 행을 제거하는 우아한 방법이 있는지 궁금합니다. 아니면 각 행을 거쳐 중복 PID를 찾아야합니까?

답변

8

블로킹 uniq을 전달하면 어떤 요구 사항에 따라 복제 된 요소가 제거됩니다.

File.open("old.csv", "w+") do |file| 
    file.puts File.readlines("csv.csv").uniq! { |s| s[/^\d+/ ] } 
end 

uniq documentation에 설명되어 있습니다.

/^\d+/ 정규식을 맞는 사람으로 바꿉니다.

CSV.open('new.csv', 'w') do |csv| 
    CSV.read('old.csv').uniq{|x| x[1]}.each do |row| 
    csv << row 
    end 
end 
+0

감사합니다, 모든 것을 해결 : – benaneesh

+0

Csv 행은 여러 행에 걸쳐있을 수 있습니다. 대신 csv 라이브러리를 사용하는 것이 좋습니다. – pguardiario

2

는의가 pid는 두 번째 열라고하자.