[ruby] 한 열에 다른 데이터가있는 Ruby에서 CSV 파일의 일부 열 사본을 만들려면 어떻게해야합니까?

“A.csv”라는 CSV 파일이 있습니다. “A.csv”의 데이터로 “B.csv”라는 새 CSV 파일을 생성해야합니다.

“A.csv”의 열 하위 집합을 사용하고 한 열의 값을 “B.csv”의 새 값으로 업데이트해야합니다. 궁극적으로 B.csv의이 데이터를 사용하여 데이터베이스에 대해 유효성을 검사합니다.

  1. 새 CSV 파일은 어떻게 만듭니 까?
  2. 필수 열의 데이터를 A.csv에서 “B.csv”로 복사하려면 어떻게해야합니까?
  3. 특정 열의 값을 어떻게 추가합니까?

Ruby를 처음 사용하지만 CSV를 읽고 배열이나 해시를 가져올 수 있습니다.



답변

mikeb가 지적한 바와 같이, 워드 프로세서가있다 – http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html – 아니면 (모든 테스트 아래의 예와 함께 따라 할 수 있고 일):

새 파일을 생성하려면 :

이 파일에는 헤더 행과 데이터 행, 매우 간단한 CSV의 두 행이 있습니다.

require "csv"
CSV.open("file.csv", "wb") do |csv|
  csv << ["animal", "count", "price"]
  csv << ["fox", "1", "$90.00"]
end

그 결과 다음과 같은 “file.csv”라는 파일이 생성됩니다.

animal,count,price
fox,1,$90.00

CSV에 데이터를 추가하는 방법

“wb”모드를 사용하는 대신 위와 거의 동일한 공식으로 “a +”모드를 사용합니다. 이에 대한 자세한 내용은 다음 스택 오버플로 답변을 참조하십시오 . Ruby File.open 모드 및 옵션은 무엇입니까?

CSV.open("file.csv", "a+") do |csv|
  csv << ["cow", "3","2500"]
end

이제 file.csv를 열면 다음과 같이됩니다.

animal,count,price
fox,1,$90.00
cow,3,2500

CSV 파일에서 읽기

이제 파일 복사 및 쓰기, CSV 읽기 및 조작을 위해 데이터를 가져 오는 방법을 알았습니다.

CSV.foreach("file.csv") do |row|
  puts row #first row would be ["animal", "count", "price"] - etc.
end

물론 이것은이 gem을 사용하여 CSV에서 정보를 가져올 수있는 수백 가지 방법 중 하나와 같습니다. 더 많은 정보를 원하시면 입문서가 있으니 지금 문서를 방문하시기 바랍니다 : http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html


답변

Ruby의 CSV 수업을 보셨습니까? 꽤 포괄적 인 것 같습니다. 여기에서 확인하세요 :
http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html


답변

당신은 아마 사용하기를 원할 것입니다 CSV::parse그것이하는 데이터의 테이블로 당신의 CSV를 이해하는 데 도움이 루비와 헤더 값에 쉽게 액세스 할 수 있습니다.

안타깝게도 메서드 CSV::parse 대한 사용 가능한 문서 는이 목적을 위해 실제로 사용하는 방법을 명확하지 않습니다.

비슷한 작업이 있었고 rubyguides.com의 Ruby로 CSV 파일을 읽고 구문 분석하는 방법 이 CSV 클래스 문서 나 여기에서 가리키는 답변보다 훨씬 더 많은 도움 을 받았습니다.

그 페이지 전체를 읽는 것이 좋습니다. 중요한 부분은 다음을 CSV::Table사용하여 주어진 CSV를 객체 로 변환하는 것입니다 .

table = CSV.parse(File.read("cats.csv"), headers: true)

이제 클래스 에 대한 문서가CSV::Table 있지만 rubyguides.com 페이지의 명확한 예제를 통해 더 많은 도움을받을 수 있습니다. 내가 강조 할 한 가지는 .parse헤더를 예상 할 때 결과 테이블이 데이터의 첫 번째 행을 row로 취급한다는 것 [0]입니다.

특히 .by_colTable개체에 사용할 수 있는 방법에 관심이있을 것입니다 . 이렇게하면 입력 및 / 또는 출력에서 ​​다른 열 인덱스 위치를 반복하고 한 위치에서 다른 위치로 복사하거나 새 값을 출력에 추가 할 수 있습니다. 작동하게되면 다시 돌아와서 예제를 게시하겠습니다.


답변