지금 레일스에서 일부 CSV를 구문 분석하는 데 심각한 문제가 있습니다. 기본적으로 내 앱에 사용자가 CSV 파일을 업로드합니다. 그런 다음 파일을 변환하여 UTF-8 형식인지 확인한 다음 구문 분석하고 처리합니다. 응용 프로그램에서 구문 분석을 시도 할 때마다 "1 행에 잘못된 내용의 인용문이 있습니다"라는 메시지가 나타납니다.레일이있는 잘못된 CSV 오류 (CSV)
원본 파일을 새 문서에 복사하여 저장하면 어떻게됩니까? 문제없이 레일 콘솔에서 파싱 할 수 있습니다. 내가 구문 분석하려고하면
내가 원래 파일을 구문 분석하려고하면, 그것은 UTF-8 인코딩에 대한 잘못된 문자 (파일이 UTF-8 따라서 응용 프로그램은 변환에없는)
뿌려 파일을 UTF-8로 변환하고 줄 끝을 LF로 변경하면 구문 분석이 실패합니다.
내가 만든 파일 버전과 응용 프로그램에서 만든 파일 사이에 차이점이있는 경우 (작동하는) 복사/붙여 넣기 버전에 0 차이가 있으므로 왜 구문 분석이 불가능한 지 알 수 없습니다. 하나는 그렇지 않다.
제안 사항? 다음과 같이 내 애플 파일을 처리 :
def create
@survey = Survey.new(params[:survey])
# Now we need to try and convert this to UTF-8 if it isn't already
encoded = File.read(@survey.survey_data.current_path)
encoding = CharlockHolmes::EncodingDetector.detect(encoded)
# We've got a guess at the encoding,
# so we can try and convert it but it
# may still fail so we need to handle
# that
begin
re_encoded = CharlockHolmes::Converter.convert(encoded, encoding[:encoding], 'UTF-8')
re_encoded = re_encoded.gsub(/\r\n?/, "\n")
# Now replace the uploaded file
File.open(@survey.survey_data.current_path, 'w') { |f|
f.write(re_encoded)
}
rescue ArgumentError
puts "UH OH!!!!!"
end
puts "#{@survey.survey_data.current_path}"
@parsed = CSV.read(@survey.survey_data.current_path)
끝에 그 어떤 변화도 가져 오지면
파일 업로드 보석 CarrierWave입니다.
나를 미치게 만드는 사람이 나를 도와 줄 수 있습니까?
편집
오류가 자극적이었다
"Survey","RD","GarrysMDs","NigelsMDs","PaulsMDs","StephensMDs","BrinleyJ","CarolineP","DaveL","GrantR","GregS","Kent","NeilC","NicolaP","AndyC","DarrenS","DeanB","KarenF","PaulR","RichardF","SteveG","BrianG","GordonA","NickD","NickR","NickT","RayL","SimonH","EdmondH","JasonF","MikeS","SamanthaN","TimB","TravisF","AlanS","Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8PM","Q8N","Q9","Q10","Q11","Q12","Q13","Q14","Q15","Q16PM","Q16N","Q17PM","Q17N","Q18PM","Q18N","Q19","Q20","Q21","Q22","comment","Q23.1","Q23.2","Q23.3","TQ23.1","TQ23.2","VPM","VN","VQ1","VQ2","VQ3","VQ4","VQ5","VQ6","VQ7","VQ8N","VQ8PM","VQ9","VQ10","VQ11","VQ12","VQ13","VQ14","VQ15","VQ16","VQ16N","VQ16PM","VQ17","VQ17N","VQ17PM","VQ18","VQ18N","VQ18PM","VQ19","VQ20","VQ21","VQ22","VQ23.1","VQ23.2","VQ23.3","VRD","XQ16","XQ17","XQ18"
오류는 무엇입니까? –
그것은 1 번 줄입니다. 지금 질문에 추가하겠습니다. – PaReeOhNos
어떻게 diff합니까? 만약 파싱에 실패하고 다른 파싱이 실패한다면 두 사람 사이에 차이가 있어야합니다. 'diff'를 실행하지 말고'cmp'를 실행하십시오. 정확한 바이트 차이를 잡을 것입니다. – Casper