質問
私は書くこHelloWorldとしてフォローアップを この にならない
filename = "testThis.txt"
total_bytes = 0
file = File.new(filename, "r")
file.each do |line|
total_bytes += line.unpack("U*").length
end
puts "original size #{File.size(filename)}"
puts "Total bytes #{total_bytes}"
その結果と同じではありませんのファイルのサイズです。と思うのかを知る必要があり format
いプラグインで---かんを逃してしまった点。 どのように測ってのファイルサイズのラインがかかってしまいます。
注意:私はWindowsのファイルとして符号化タイプANSI.
編集: から割り出しと同じ結果が出た。
filename = "testThis.txt"
total_bytes = 0
file = File.new(filename, "r")
file.each_byte do |whatever|
total_bytes += 1
end
puts "Original size #{File.size(filename)}"
puts "Total bytes #{total_bytes}"
で誰もができるとしていま---
解決
IO#が動作と同じにした場合は撮影から入力したコマンドライン:の"入り"などの入力に関する情報は見つかりませんですが#があるというファイルまたはその他のサブクラスのIOでのレコード店ディスクユニオンい合わせます。
に関連する 嘴部
がん相談なぜだのライン長の総括ファイルへの大きさはどれくらいですか?きの解決は難しい問題により必要...
Aha.と思います。
足りない手軽なiPod(その他のうたれているかがわかろうかというもないわからないたい場合は正確に4K塊場IO#read(4000いお友達(4000は4096?) れば幸せによって、サイトマスターは、提供する場合のようなことすべき作品:
class Chunkifier
def Chunkifier.to_chunks(path)
chunks, current_chunk_size = [""], 0
File.readlines(path).each do |line|
line.chomp! # strips off \n, \r or \r\n depending on OS
if chunks.last.size + line.size >= 4_000 # 4096?
chunks.last.chomp! # remove last line terminator
chunks << ""
end
chunks.last << line + "\n" # or whatever terminator you need
end
chunks
end
end
if __FILE__ == $0
require 'test/unit'
class TestFile < Test::Unit::TestCase
def test_chunking
chs = Chunkifier.to_chunks(PATH)
chs.each do |chunk|
assert 4_000 >= chunk.size, "chunk is #{chunk.size} bytes long"
end
end
end
end
注の利用IO#readlinesすべてのテキストの一slurp:#各#each_lineいます。使用した文字列#chomp!このOSは、byts終了時に削除される 、または何を強制できるように出力されます。
私はあなたをファイル#で書く#印刷または#を出力は同時に、カスピカイアザラシが届けOS固有の改行コードdnaの塩基配列を決定した。
まっつマルチバイト文字のみeach_byteまたは開梱(C*)オプションとモンキー-パッチ文字列のようなこと:
class String
def size_in_bytes
self.unpack("C*").size
end
end
の開梱版の約8倍のeach_byteワンマ機、ね.
他のヒント
ございIO#each_byteなど
total_bytes = 0
file_name = "test_this.txt"
File.open(file_name, "r") do |file|
file.each_byte {|b| total_bytes += 1}
end
puts "Original size #{File.size(file_name)}"
puts "Total bytes #{total_bytes}"
ることはもちろん、しない線です。最良のオプションのためにはそのファイル each_byte
まとの出会い \r\n
.IOクラスは、バンチのかの低レベルの読み取る方法もご提供いただきました。
する複数の重複する問題はこちら
改行文字
\r\n
対\n
(当たり前にしました。もEOFファイルの文字(^Z)?定義の"サイズ"の"問題を計算書:など多くの文字"(慮したマルチバイト文字エンコーディング)など多くのバイト"?
の相互作用の
$KCODE
グローバル変数(推奨されていませんruby1.9.見String#encoding
友だ動1.9).があるのか、例えば、アクセント文字のファイルとは何ですか?フォーマット文字列
#unpack
.たいと思いますC*
こんcountバイトまでとなります。
注のものの存在を IO#each_line
(くスローされる可能性がありますの while
やちょっときれいな色になりまruby-慣用句;-)).
の課題であることを保存する際のテキストファイルwindowsの場合、改行文字(文字13 10)その2バイトを保存する場合でlinuxの場合に限りあり1(キャラクター10)となります。しかし、rubyの報告として、単一の文字' '-という文字は10.このドラマのストーリーも、あるいはlinuxとwindowsのファイルをrubyでも文字です。
ということで、 知 このファイルについて窓からはテキストファイルを実行し、毎回する改行文字を追加できる1ご数です。そうでない場合は、カップルの条件分岐にはちょっと状態です。
ちなみありませんEOFキャラクター.
f = File.new("log.txt")
begin
while (line = f.readline)
line.chomp
puts line.length
end
rescue EOFError
f.close
end
ここでは、簡単な液に、仮に現在のファイルポインタ設定の行を読み込むファイル:
last_pos = file.pos
next_line = file.gets
current_pos = file.pos
backup_dist = last_pos - current_pos
file.seek(backup_dist, IO::SEEK_CUR)
この例では"ファイルのファイルします。このループ:
last_pos = file.pos
begin loop
next_line = file.gets
current_pos = file.pos
backup_dist = last_pos - current_pos
last_pos = current_pos
file.seek(backup_dist, IO::SEEK_CUR)
end loop