2011-06-23 3 views
1

私はRubyのに書き込んでいますが、出力が途中で止まっているようです。Ruby Premature EOF?

入力ファイル - base64で埋め込みフォントを持つ大規模なCSSファイル

出力ファイル - 基本的なhtmlファイル。

#write some HTML before the CSS (works) 
... 
#write the external CSS (doesn't work, output finished prematurely) 
while !ext_css_file.eof()   
    out_file.puts(ext_css_file.read()) 
end 
... 
#write some HTML after the CSS (works) 

結果のファイルの読み取りの結果にプットを行う場合(埋め込みフォントの真ん中で)切り捨てCSS

で、基本的には、有効なHTMLファイルである()、私は同じことを得ます結果:CSSファイルのみ、この最後の文字列まで読まれる:「RMSHhoPCAGt/mELDBESFBQSggGfAgESKCUAAAAAAAwAlgABAAAAAAABAAUADAABAAAAAAAC」

+0

ないプットは/ EOF一緒にとてもよく働く/読めば必ず...このような何かを試してみてください。ファイルを文字列に読み込み、それを文字列として書き込もうとしましたか?代わりに:読み取り/書き込みを使用する – mkro

答えて

1

これは、CSSファイルが実際に含まれているものに、より洞察力のない詳細なソリューションを提供することは困難です。上記のコードに基づいて、私の代わりにこのような何かをしようとするだろう:

#write some HTML before the CSS (works) 
... 
#write the external CSS (doesn't work, output finished prematurely) 
out_file.puts(ext_css_file.read()) 
... 
#write some HTML after the CSS (works) 

を私は場合read方法は、ファイル全体の内容を読み取り、返しますので、あなたが.eofチェックが必要だと思う、または空の文字列またはゼロはありませんファイルの最後に。ここをクリックしてください:http://apidock.com/ruby/IO/read

私は同じ種類のデータを読み書きする傾向があります。たとえば、putsを使用して新しいファイルにデータを書き込んだ場合は、readlinesを使用してデータを読み込みます。もし私がwriteを使ってバイナリデータを書いていたら、私はreadを使ってデータを読むでしょう。私はどちらかの文字列またはバイトと一致し、2つを混ぜることはありません。

File.open('writable_file_path', 'w') do |f| 
    # f.puts "some html" 
    f.puts IO.readlines('css_file_path') 
    # f.puts "some more html" 
end