Eu estava tentando usar o código a seguir para ler linhas de um arquivo. Mas ao ler um arquivo , o conteúdo está todo em uma linha:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Mas esse arquivo imprime cada linha separadamente.
Eu tenho que usar stdin, tipo ruby my_prog.rb < file.txt
, onde eu não posso assumir qual é o caractere de final de linha que o arquivo usa. Como posso lidar com isso?
ruby
line-endings
desenhar
fonte
fonte
line_num = 0
, você poderia usareach.each_with_index
ou possivelmenteeach.with_index
.read
.line.chomp
para lidar com as terminações de linha (cortesia de @SreenivasanAC )Respostas:
Eu acredito que a minha resposta cobre suas novas preocupações sobre a manipulação de qualquer tipo de fins de linha uma vez que ambos
"\r\n"
e"\r"
são convertidos em padrão Linux"\n"
antes da análise das linhas.Para dar suporte ao
"\r"
caractere EOL junto com o regular"\n"
e"\r\n"
do Windows, aqui está o que eu faria:Obviamente, isso pode ser uma má idéia para arquivos muito grandes, pois significa carregar o arquivo inteiro na memória.
fonte
/\r?\n/
o que irá abranger tanto \ r \ n \ n sem combinar linhas vazias como o comentário de Pod fariaRuby tem um método para isso:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
fonte
with_index
com isso também?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Isso executará o bloco especificado para cada linha do arquivo sem colocar o arquivo inteiro na memória. Veja: IO :: foreach .
fonte
Seu primeiro arquivo tem finais de linha do Mac Classic (isso é o que é
"\r"
habitual"\n"
). Abra compara especificar as terminações da linha.
fonte
É por causa das linhas finais em cada linha. Use o método chomp em ruby para excluir a linha final '\ n' ou 'r' no final.
fonte
Sou parcial com a seguinte abordagem para arquivos com cabeçalhos:
Isso permite processar uma linha (ou linhas) de cabeçalho diferente das linhas de conteúdo.
fonte
e quanto fica ?
fonte
Não se esqueça de que, se você estiver preocupado com a leitura de um arquivo que possa ter grandes linhas que poderiam inundar sua RAM durante o tempo de execução, sempre poderá ler o arquivo em pedaços. Consulte " Por que compactar um arquivo é ruim ".
fonte