2013-01-07 3 views
1

다른 파일에서 데이터를 하나 개의 파일에 내용의 일부를 교체 :이 같은 선이있는 스크립트가 포함되어 내가 html 파일 <code>myfile.html</code>이

var json = '[{"name":"Hydrogen","number":"1","symbol":"H","weight":"1.00794"},{"name":"Helium","number":2,"symbol":"He","weight":4.002602},{"name":"Lithium","number":3,"symbol":"Li","weight":6.941},{"name":"Beryllium","number":4,"symbol":"Be","weight":9.012182},{"name":"Boron","number":5,"symbol":"B","weight":10.811},{"name":"Carbon","number":6,"symbol":"C","weight":12.0107}]'; 

변수에 할당 작은 따옴표 내의 문자열 json은 실제로 다양합니다. 이 문자열을 다른 파일의 전체 내용으로 바꾸고 싶습니다. myjson.json. Find and replace in a file in Ruby 여기 :이 일을 search and replace with ruby regex :

replace = File.read("myjson.json") 
changefile = File.read("myfile.html") 
changefile.sub(%r{var json = '[^<]+';}, replace) 

있지만 작동하지

나는 여기에 코드를 시도했다. 그 정규식이 내가 잘못하고 있는지, 아니면 더 많은 것이 있는지는 잘 모르겠습니다.

UPDATE

아래의 답변을 읽은 후, 내 첫 번째 시도했다 : 이것은이 제대로 찾았어요

replace = File.read("myjson.json") 
changefile = File.read("myfile.html") 
changefile.sub!(%r{var json = '.+'}, replace) 
puts changefile 

하지만 var json = ''를 모두 제거하고 myjson.json으로 대체 - 내가 원하는 var json =을 유지하고 두 개의 작은 따옴표 사이의 내용 만 바꿉니다.

replace = File.read("myjson.json") 
changefile = File.read("myfile.html") 
changefile.sub!(%r{var json = '.+'}, "var json = 'replace'") 
puts changefile 

을하지만 그건 그냥 var json = 'replace'

내가 위치를 찾으려면 원래 var json =를 사용하려면 그것을 대체,하지만 난 그것을 제거하지 않으 : 그럼 나는 시도했다.

그래서 내가 바보와 잘못 알고 일을했다,하지만 일 : 도움을

replace = File.read("myjson.json") 
changefile = File.read("myfile.html") 
changefile.sub!(%r{var json = '.+'}, "var json = 'thanksforthehelptinman'") 
changefile.sub!(%r{thanksforthehelptinman}, replace) 
puts changefile 

감사합니다!

답변

0

[]이 정규식에 예약되어 있기 때문에 정규식이 올바르지 않습니다. 나는 당신의 JSON 파일에서 무엇을 알 수 없기 때문에

%r{var json = '\[.+\]'} 

가 좀 더 정확하지 않을 수 있습니다,하지만 야구장에 당신을 얻을해야합니다 : 당신은 그들을 탈출해야합니다.

또한 changefile.sub에 무언가를 지정하지 않으면 대체물이 버려집니다. 당신은이 두 가지 중 하나를 수행 할 수

changefile = changefile.sub(%r{var json = '\[.+\]'}, json) 

또는 changefile를 변이 : 당신의 도움에 대한

changefile.sub!(%r{var json = '\[.+\]'}, json) 
+0

감사합니다. 위의 링크에서 [b] b/c를 사용하고 있었고 정규 표현식의 필수 부분이라고 생각했습니다. 위의 JSON은 대체해야 할 것과 비슷하지만 var의 정확한 내용이 변경 될 것입니다. 정규 표현식은 와일드 카드를 사용하여 두 개의 작은 따옴표 사이의 문자를 캡처해야하기 때문입니다. myjson.json의 JSON 내용까지 계속 변경 될 예정이지만 위에서 설명한 것과 같은 형식을 따릅니다. – gcubed

+0

작동하지 않습니다. 변경된 변경 파일을 myfile.html에 다시 쓰려면 어떻게해야합니까? – gcubed

+0

그것은 당신이 스스로 찾아 볼 수있는 간단한 것입니다. Ruby의 IO 모듈을보십시오. –