2012-09-07 2 views
4

Ruby를 사용하면 출력 파일에 쓰여지는 변수 중 일부에서 자동으로 작은 따옴표와 큰 따옴표를 이스케이프 처리 할 수 ​​있습니다. PHP에서 오는 것은 addslashes 유형의 함수를 찾고 있지만 Ruby에서는이를위한 간단한 해결책이없는 것 같습니다. 예를 들어Ruby에 addslashes가 있습니까?

.gsub(/['"\\\x0]/,'\\\\\0') 

:

require "csv" 

def generate_array(file) 
    File.open("#{file}" + "_output.txt", 'w') do |output| 
     CSV.foreach(file) do |img, _, part, focus, country, loc, lat, lon, desc, link| 
      output.puts("[#{lat}, #{lon}, '#{img.downcase}', '#{part}', '#{loc}', '#{focus}', '#{country}', '#{desc}', '#{link}'],") 
     end 
    end 
end 

ARGV.each do |file| 
    generate_array(file) 
end 
+0

출력은 일반 텍스트, 형식이 내가 일하고 있어요 자바 스크립트 프로그램에서 사용되는 2 차원 배열 스타일의 일종이다. 예를 들어 [123.123, 123.123, 'img', 'part', 'loc'... 등], 물론 문자열 변수 중 하나에 작은 따옴표가 포함되어있을 때 문제가 발생합니다. –

+1

출력이 JavaScript에서 사용될 예정이라면 많은 시간과 노력을 절약하고 JSON을 사용해야하는 이유는 무엇입니까? JSON은 잘 정의되어 있으며 방대한 라이브러리 지원을 제공합니다. 바로 Ruby 데이터 구조를 만들고 거기에'to_json'을 호출하고 더 흥미로운 문제로 넘어갑니다. –

+0

raina77ow, mu가 너무 짧습니다. 그래, 그렇게 될 것 같습니다. 감사합니다 –

답변

5

난 당신이 구성이 루비와 PHP addslashes 기능을 에뮬레이션 할 수 있다고 생각

slashed_line = %q{Here's a heavily \s\l\a\s\h\e\d "string"} 
puts slashed_line.gsub(/['"\\\x0]/,'\\\\\0') 
# Here\'s a heavily \\s\\l\\a\\s\\h\\e\\d \"string\" 
+0

감사. 이것이 내 질문에 대한 해답이 될 것 같습니다. –

+1

글쎄, 난 그냥 질문에 대한 답변을했습니다 (아마 누군가가 그것을 정확하게 볼 것입니다). 하지만 귀하의 상황에서 나는'addslashes' 접근법을 완전히 버리고 JSON으로 갈 것입니다.) – raina77ow

1

내가 루비를 모른다, 그러나 나는 알고 PHP에서 addslashes은 꽤 많이 사용되지 않습니다.

데이터를 이스케이프해야 할 때마다 다른 이스케이프 루틴이 필요합니다. HTML은 데이터베이스 작업에 대해 다른 인코딩 및 처리가 필요하며 각 데이터베이스에는 고유 한 특수 규칙이 있습니다.

나는 귀하의 질문에 당신이 CSV 파일에 물건을 출력하려한다고 가정합니다. 다시 표준 CSV가 없기 때문에 물고기의 전체 주전자가 열립니다. 데이터 작성에 필요한 사항 (엄격한 ASCII 또는 유니 코드 또는 기타 항목)과 이스케이프 인용 형식이 필요한지에 대해 조사해야합니다. 대부분의 CSV 소비자는 한 개의 큰 따옴표 대신 두 개의 큰 따옴표를 사용합니다. 문자열에 "이 필요하면 ""으로 작성하십시오.

+2

CSV의 표준이 있습니다. [RFC 4180] (http://tools.ietf.org/html/rfc4180) – Joey

+1

아, 알고 있습니다. 나는 또한 지난 20 년 동안 데이터 변환을 해왔으며 CSV보다 선행하거나 어쨌든 자신의 시스템을 압연 한/로트/시스템이 있습니다. –

+0

@Joey - 편집 해 주셔서 감사합니다. 난독증의 기쁨. –

3

String#dump 있습니다 :

slashed_line = %q{Here's a heavily \s\l\a\s\h\e\d "string"} 
puts slashed_line.dump 
#=> "Here's a heavily \\s\\l\\a\\s\\h\\e\\d \"string\"" 
+0

루비가 다시 빛난다! – Mirko