2
내 Ruby 환경은 Ruby 2.3.1 및 Rails 5.0.0.1입니다.Ruby에서 가져올 때 문자열 음수를 정수로 변환하는 중 오류가 발생했습니다.
내가 예를 들어, 정수에 부정적인 문자열 숫자로 변환하려고 해요 :
나는이 전원을 다시 "-2000"는 IRB 터미널에서, 나는 결과가 -2000 예상 있어요
그러나이 데이터를 CSV 파일에서 가져 오면 변환하려고합니다.
나는 다음과 같은 정보를 사용하고 있습니다 :
CSV 파일
345,-2000
345,120000
코드 파일
CSV.foreach("file.csv") do |row|
p [row[0], row[1]]
p row[1].to_i
p row[1].force_encoding('UTF-8').to_i
p Integer(row[1])
p Integer(row[1].force_encoding('UTF-8'))
end
내가있어 그 :
["345", "-2000"]
0
0
'Integer': invalid value for Integer(): "\xC2\xAD2000" (ArgumentError)
'Integer': invalid value for Integer(): "\xC2\xAD2000" (ArgumentError)
정수를 사용하여() , 나는 그걸 발견했다. ign는 "\ xC2 \ xAD"로 표시됩니다.
요약하면 to_i 메서드는 "\ xC2 \ xAD2000"을 0으로 변환하고 Integer()가 오류를 발생시킵니다.
누군가 도움을 줄 수 있습니까?
감사합니다.
이 데이터의 출처 및/또는 CSV는 (으)로 인코딩 된 데이터는 무엇입니까? 이 자습서는 도움이 될 수 있습니다 - http://www.justinweiss.com/articles/3-steps-to-fix-encoding-problems-in-ruby/ –
@DamienRoche 이것은 CSV 확장자가있는 단순한 파일입니다. 이 파일을 인코딩하지 않았습니다. CSV 클래스를 사용하여 배열의 한 줄에있는 각 행을 바꿉니다. 나는이 튜토리얼을 보게 될 것이다. 감사. –
'force_encoding'은 매우 특정한 경우에만 사용해야합니다. 파일을 열 때 거의 절대 사용하지 않습니다 (파일의 전체 인코딩을 따르지 않는 특정 텍스트가 있다는 것을 알지 못하는 경우). 대신 CSV를 열 때 인코딩을 지정해야합니다. [the doc] (http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/CSV.html#method-c-foreach)를 참조하십시오. – Kelvin