dra*_*raw 226 ruby line-endings
我试图使用以下代码从文件中读取行.但是在阅读文件时,内容都在一行中:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Run Code Online (Sandbox Code Playgroud)
但是这个文件分别打印每一行.
我必须使用stdin,比如ruby my_prog.rb < file.txt,我不能假设文件使用的行尾字符是什么.我该怎么处理?
Jon*_*han 504
Ruby确实有一个方法:
File.readlines('foo').each do |line|
Run Code Online (Sandbox Code Playgroud)
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
tal*_*bes 380
File.foreach(filename).with_index do |line, line_num|
puts "#{line_num}: #{line}"
end
Run Code Online (Sandbox Code Playgroud)
这将为文件中的每一行执行给定的块,而不会将整个文件压入内存.请参阅:IO :: foreach.
Oli*_* L. 142
我相信我的回答涵盖了你关于处理任何类型的线路的结局,因为这两个新的关注点"\r\n",并"\r"转换为Linux的标准"\n"解析行之前.
为了支持"\r"EOL角色以及常规角色"\n","\r\n"从Windows,这就是我要做的:
line_num=0
text=File.open('xxx.txt').read
text.gsub!(/\r\n?/, "\n")
text.each_line do |line|
print "#{line_num += 1} #{line}"
end
Run Code Online (Sandbox Code Playgroud)
当然,这对于非常大的文件来说可能是一个坏主意,因为这意味着将整个文件加载到内存中.
Jos*_*Lee 18
你的第一个文件有Mac Classic行结尾(这"\r"不是通常的"\n").打开它
File.open('foo').each(sep="\r") do |line|
Run Code Online (Sandbox Code Playgroud)
指定行结尾.
对于具有标题的文件,我对以下方法不满意:
File.open(file, "r") do |fh|
header = fh.readline
# Process the header
while(line = fh.gets) != nil
#do stuff
end
end
Run Code Online (Sandbox Code Playgroud)
这允许您以不同于内容行的方式处理标题行(或多行).
小智 6
这是因为每行的终结线.使用ruby中的chomp方法删除末尾的'\n'或'r'.
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line.chomp}"
end
Run Code Online (Sandbox Code Playgroud)
怎么样得到?
myFile=File.open("paths_to_file","r")
while(line=myFile.gets)
//do stuff with line
end
Run Code Online (Sandbox Code Playgroud)