2016-07-01 2 views
1

터미널에서이 Ruby 코드를 실행하면 "작동합니다"라는 메시지가 콘솔에 표시되지 않습니다. 이 코드의 문제점은 무엇입니까?Ruby 터미널 코드가 작동하지 않습니다.

f = File.open("hello.txt", 'w') 
f.puts "Hello World" 

text = IO.read("hello.txt") 

if text == "Hello World" 
    puts "it works" 
end 

답변

2

데이터를 저장하려면 스트림을 닫아야합니다.

f = File.open("hello.txt", "w"){|file| file << "Hello World"} 

text = IO.read(f.path) 

if text == "Hello World" 
    puts "it works" 
end 

나는이 당신은 f.close 누락

1

도움이되기를 바랍니다 :

f = File.open("hello.txt", 'w') 
f.puts "Hello World" 
f.close 
text = IO.read("hello.txt") 
puts "it works" if text == "Hello World" 
3

몇 가지주의 할 수 있습니다.

File을 사용하여 파일에 쓸 때 효율적으로 데이터를 버퍼링하므로 (파일 시스템에 반복적으로 쓰는 것이 아니라) flush 핸들을 사용하여 버퍼링 된 데이터로 실제로 쓰기를 원할 것입니다 데이터. flush을 호출하거나 암시 적으로 핸들을 닫음으로써이를 명시 적으로 수행 할 수 있습니다.

2) 사용자가 입력하거나 파일 시스템에서 읽은 gets 일 경우 대개 후행 공백 문자 strip이 좋습니다. text.strip == "Hello World"

3) 오히려 같은 파일을 두 핸들을 열지 (FileIO)를 통해, 당신은 w에서 w+로 전환하여 하나의 읽기/쓰기 스트림을 열 수 :없이 평등 평가가 실패합니다. 그런 다음 올바른 위치로 되감을 수 있습니다. 여기

는 접근 방식이 보일 수 있습니다 방법은 다음과 같습니다

f = File.new("hello.txt", 'w+') 
f.puts "Hello World" 
f.rewind 
text = f.read.strip 
puts "It works" if text == "Hello World" 
+0

내가이 파일 (F)을 읽을 수 = File.open ("text.txt", 'R') f.rewind 텍스트를이 작업을 수행하려면 = f.read.strip if text == "Hello" puts "작동합니다" 끝 –

관련 문제