2016-10-21 2 views
0

으로 내가 배열의 형태로 csv 파일에 쓰고 문자열 값을 추가하고있다 - 내 파일을 검사 할 때따옴표

output = "This is a, ruby output" 
CSV.open("output/abc.csv", "a+") do |csv| 
    csv << [output] 
end 

abc.csv 추가 된 행은 따옴표 (")에있다 시작과 필드의 끝. 어떻게 지금까지 ---

파일 출력으로? 그것을

"This is a, ruby output" 

을 제거 할 수 나는 tr 또는 slice을 시도했습니다 csv에 저장하기 전에,하지만 쓰기가 그것을 일으키는 것 같습니다.

+0

이 "유효"CSV (CSV 공식적으로 정의되지 않는다)이며, 잠재적으로 필드 내의 콤마 제대로 출력을 판독하고 어떤 이해되도록 할 필요가 있었다. 필드를 쉼표로 결합하려면 CSV 라이브러리를 건너 뛰고 대신 [output] .join (',')'을 사용하십시오. – Owen

+0

문제점을 재현 할 수 없습니다. 코드는'This is a ruby ​​output'을 따옴표없이 출력합니다. 'force_quotes' 옵션이 true로 설정되면 따옴표를 출력하지만 기본적으로 false로 설정되어 있으므로 코드 조각이 설정하지 않습니다. 문자열에 따옴표 나 쉼표가 있지만 따옴표가없는 경우 따옴표를 출력합니다. 즉, 예제를 다시 확인하십시오. 그렇지 않다면 뭔가 이상한 일이있어서 루비를보고하십시오. – Amadan

+0

@Owen : 손으로 CSV를 작성하는 것은 위험하고 좋지 않습니다. – Amadan

답변

3

따옴표를 제거하면 출력물은 더 이상 CSV가 아닙니다. CSV 클래스는 다른 구분 기호를 사용하도록 지시 할 수 있으며 해당 구분 기호가 입력에 포함되어있는 경우에만 인용합니다. 예를 들어

require 'csv' 
output = "This is a, ruby output" 
File.open("output/abc.csv", "a+") do |io| 
    csv = CSV.new(io, col_sep: '^') 
    csv << [output, "the end"] 
end 

출력 :

This is a, ruby output^the end 
+1

@Owen에 대한 설명 주셔서 감사합니다. 내가 쓸데없는 문제로 안절부절 못하고 있었지만, 당신의 설명이 그것을 분명히합니다. 새로운 것을 배웠습니다. – Aniruddha