質問

私は書くこ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クラスは、バンチのかの低レベルの読み取る方法もご提供いただきました。

する複数の重複する問題はこちら

  1. 改行文字 \r\n\n (当たり前にしました。もEOFファイルの文字(^Z)?

  2. 定義の"サイズ"の"問題を計算書:など多くの文字"(慮したマルチバイト文字エンコーディング)など多くのバイト"?

  3. の相互作用の $KCODE グローバル変数(推奨されていませんruby1.9.見 String#encoding 友だ動1.9).があるのか、例えば、アクセント文字のファイルとは何ですか?

  4. フォーマット文字列 #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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top