代码示例1:
$body = Get-ChildItem -Literal $path -Recurse -File -Include *.xlsx, *.docx, *.txt, *.csv |
ForEach {
$fPath = $_.FullName.Substring($path.Length + 1)
"<a href=""$fPath"">$fPath</a><br>"
}
$html = ConvertTo-Html -Head $head -Body $body | Out-String
代码示例2:
def count_lines1(file_name)
open(file_name) do |file|
count = 0
while file.gets
count += 1
end
count
end
end
我想知道哪个是实现文件中行计数的更好方法。就Ruby中的良好语法而言。
答案 0 :(得分:2)
这是实现文件中行计数的更好方法。
都不是。 Ruby可以使用foreach
:
def count_lines(file_name)
lines = 0
File.foreach(file_name) { lines += 1 }
lines
end
如果我针对我的〜/ .bashrc运行:
$ ruby test.rb
37
foreach
速度非常快,可以避免可扩展性问题。
或者,您可以利用操作系统中的工具,例如wc -l
专门为该任务编写的工具:
`wc -l .bashrc`.to_i
将再次返回37。如果文件很大,wc
可能无法在Ruby中执行,因为wc
是用编译代码编写的。
您还可以读取带有读取和计数换行符的大块。
是的,read
将允许您这样做,但可扩展性问题仍将存在。在我的环境中,read
或readlines
可能是一个脚本杀手,因为我们经常需要将文件处理成数十GB。有足够的RAM来保存数据,但I / O因为压缩数据的开销而受到影响。 &#34; Why is "slurping" a file not a good practice?&#34;进入这个。
另一种大块读取方法是告诉Ruby读取设置块大小,计算该块中的行尾,循环直到完全读取文件。我没有在上面的链接答案中测试该方法,但是在我用Perl编写时,过去做过类似的事情,发现差异并没有真正改善,因为它导致了更多的代码。那时,如果我所做的只是计算行数,那么调用wc -l
更有意义并让它完成工作,因为它对编码时间来说要快得多,而且很可能在执行时间。