Как прочитать текстовый файл и сохранить последние x строк - одну строку в ruby? - PullRequest
0 голосов
/ 16 января 2012

Я заставил его работать на две строки.

  • Как будет выглядеть код только в одной строке?В рубине.
  • Является ли код для последних x строк (в данном случае 55) лучшим?

пример кода

$max_lines_in_log=55
$cron_log = "C:/EduTester/cron/rufus.log"


array = File.read($cron_log).split("\n")[-$max_lines_in_log,$max_lines_in_log]
open($cron_log, 'w') { |f| f.puts array.join("\n") }

Ответы [ 4 ]

1 голос
/ 16 января 2012
File.open(output, 'w'){|out| out.puts File.open(input).readlines[-55,55]}
1 голос
/ 16 января 2012

Я ненавижу писать это в одну строку, но это то, что вы спросили:

File.open("o_f.log", "w") { |o_f| o_f.write File.open("i_f.log") { |i_f| i_f.each_line.each_cons(55).inject{ |a, e| e } } }

Не работает, если nlines < 55, поэтому немного лучшая версия будет:

File.open("o_f.log", "w") { |o_f| o_f.write File.open("i_f.log") { |i_f| i_f.each_line.inject([]){ |ls, l| ls.shift(54).unshift(l) }.reverse } }
1 голос
/ 16 января 2012
`tail -n #{$max_lines_in_log} #{$cron_log} > #{$cron_log}`
0 голосов
/ 16 января 2012
buff=[]
IO.foreach('c:/test.txt') { |line|
  if buff.length < n
    buff << line
  else
    buff.shift
    buff << line
  end
}

result = buff.join
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...