当前位置:  开发笔记 > 后端 > 正文

Ruby读取行读取的不同文件大小

如何解决《Ruby读取行读取的不同文件大小》经验,为你挑选了1个好方法。

我需要做一些文件大小至关重要的事情.这产生了奇怪的结果

filename = "testThis.txt"
total_chars = 0
file = File.new(filename, "r")
file_for_writing = nil
while (line = file.gets)
  total_chars += line.length
end
puts "original size #{File.size(filename)}"
puts "Totals #{total_chars}"

像这样

original size 20121
Totals 20061

为什么第二个出现短缺?

编辑:Answerers的预感是正确的:测试文件中有60行.如果我改变这一行

  total_chars += line.length + 1

它完美地运作.但是在*nix这个改变是错误的吗?

编辑:跟进现在在这里.谢谢!



1> Andy..:

文件中存储了描述线条的特殊字符:

在Windows/DOS和Windows上的CR LF(0x0D 0x0A)(\ r \n)

UNIX系统上的0x0A(\n).

Ruby gets使用UNIX方法.因此,如果您读取Windows文件,则在读取的每一行时将丢失1个字节,因为\ r \n字节将转换为\n.

String.length没有字符串(以字节为单位)的大小的良好量度.如果String不是ASCII,则一个字符可能由多个字节(Unicode)表示.也就是说,它返回String中的字符数,而不是字节数.

要获取文件的大小,请使用File.size(file_name).

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有