2017-09-28 1 views
0

이 글은 나를 도피하고 있습니다.블록을 사용하여 파일에 글쓰기, 줄 바꿈을 할 수 없습니다.

이 첫 번째 방법은 내가 원하는 방식으로 정확하게 보이지만 파일에 쓰고 싶습니다.

def write_dir_two 
    Dir.chdir("/vagrant/TestRails/Music") 
    Dir.glob('*') do |file| 
    if File.ftype(file) == "directory" 
     puts Dir.entries(file) 
    end 
    end 
end 

이제 개행을 사용할 수 없습니다. 내 보충을 시도하여 '구분 기호'변수 (예 : separator = "\n")를 만들고 몇 가지 다른 트릭을 만들었지 만 아무런 변화가 없습니다. 작업이 너무 쉬워 보이고 다른 상황에서도 해냈습니다. 모든 비 업무용 솔루션을 제외 시켰지만 근본적으로 이와 같은 작업을 시도하고 있습니다 - music.write(Dir.entries("#{file}\n")). 즉, 각 파일마다 고유 한 행이 있습니다. 나는 또한 실패한 file + "\n"을 시도했다.

def write_dir_one 
    music = File.new("music_2", 'w') 
    Dir.chdir("/vagrant/TestRails/Music") 
    Dir.glob('*') do |file| 
     if File.ftype(file) == "directory" 
     music.write(Dir.entries(file)) 
     end 
    end 
end 

puts은 화면에 서식 훌륭한 일을한다.

편집 : file.write 대신 file.puts을 사용할 수 있다는 것을 깨달았습니다. 이것은 작동하지만 다른 사람이 다른 더 좋은 방법을 가지고 있다면 당분간은 그대로 두겠습니다.

+2

'file.puts'이 더 좋은 방법입니다. 또한 "실패했습니다"는 끔찍한 문제 설명입니다. __how__에 실패 했습니까? –

+0

새 라인이 잘못된 장소에있는 것처럼 들립니다. 'music.write ("# {Dir.entries (file)} \ n")' – Puhlze

+0

@sergio - 네, 맞아요, 문제 설명자가 잘못되었습니다. 문법 오류로 실패했습니다. – stuartambient

답변

1

Dir#entries은 지정된 디렉토리에있는 모든 파일의 배열을 반환하므로 끝에 이름 바꾸기가있는 디렉토리가 없으므로 Dir.entries("#{file}\n")을 실행하면 실패합니다. 그 이유 File#write 작동하지 않습니다는 단순히 문자열이 아닌에 to_s를 호출하는 배열 인수로 호출하면 특별히

를 주장하기 때문에 출력하기 전에 문자열로 변환 File#puts 작품 있기 때문에, 각 기록 요소를 새 행에 추가합니다. 당신이 puts을 사용하지 않고이 작업을 수행하기를 원한다면

그래서, 당신은 단지 호출 할 수

music.write(Dir.entries(file).join("\n")) 
+0

그 설명에 감사드립니다. 저를 혼란스럽게 한 것은 개행과 배열을 사용했지만 각각의 메소드를 반복하는 것입니다. 방금'each'와 삽 연산자를 사용하여 파일에'array'를 쓰는 것을 테스트했고, 그렇습니다.'def write_dir_three [ "abc", "def", "ghi"]. @music << "# {letters} \ n" end end' – stuartambient

관련 문제