2016-12-19 5 views
0

문제는 파일에 값을 저장할 때마다 레일스가 마침내 공백을 각 행에 추가한다는 것입니다.레일스 : 파일이 뒤 공백으로 채워짐

예를 들어 나는 initaial 내용이 조작있어 파일을 읽을 때

"cv" =>"cv\r\n"

"cv\r\nvd" =>"cv\r\n\r\nvd\r\n" 여기

입니다 내 파일 생성 방법 :

File.open(path, "w+") do |f| 
    f.truncate(0) 
    f.puts value 
end 

감사합니다. 각 도움!

답변

1

이론

후행 줄 바꿈이없는 value 경우 줄 바꿈이 value에서 오지 않고 puts에서 있기 때문에, value.chomp 아무것도 변경되지 않습니다 : 일반적으로 (

는 레코드 분리를 기록 newline) 이 이미 개행 시퀀스로 끝나지 않은 경우.

IO#write이 당신이 찾는 방법입니다.

"w +"읽기 - 쓰기, 길이가 제로 에 기존 파일을 자릅니다 또는 읽기와 쓰기에 대한 새 파일을 작성하기위한 w+ 스탠드 때문에

마지막으로, f.truncate(0)가 필요하지 않습니다.

path = "test.txt" 
value = 2 

File.open(path, "w+") do |f| 
    f.write value 
end 

p File.read(path) 

반환 : 대신 writeputs

"2" 

, 그것은 반환

"2\n" 

줄 바꿈 문자열 내부에?

어떤 이유로 든 값이 내부에 개행 문자가있는 문자열 인 경우 chompwrite은 도움이되지 않습니다. 한 여러 줄 바꿈을 대체 할 gsub를 사용

f.write value.gsub(/\R+/," ") 
+0

HM :

path = "test.txt" value = "Hello\r\n\r\nWorld\n\nLine #3\r\rLine #4" File.open(path, "w+") do |f| f.write value.gsub(/\R+/,"\n") end p File.read(path) #=> "Hello\nWorld\nLine #3\nLine #4" 

대신 뉴 라인의 공간을합니다. 'f.write value'는 아무 것도 파일에 추가하지 않습니다. 'f.write (value)'는 파일에 값을 추가하지만 후행 공백으로 추가합니다. – jonhue

+0

예상치 못한 결과입니다. 'p value'는 무엇을 반환합니까? 가치는 방법인가 변수인가? 줄에'f.write value' 만 있습니까? –

+0

'value'는 변수이고 예를 들어'gt \ r \ nki'를 반환합니다.생성 된 파일을 읽을 때, 나는 다음을 얻습니다 :'gt \ r \ nnki' – jonhue