在ruby中平均分割文件内容

时间:2017-06-09 07:27:38

标签: ruby split

我正在读取一个文件(input.txt)并尝试将内容拆分为'*'作为分隔符,下面是我想出的代码,但它将所有值分配给第一个列表,即uno而不是平等分裂。我做错了。非常感谢您的帮助。

还有一个场景 - 即使我们不知道用*分隔了多少行,如何平均分割内容。换句话说,这里有3行用多个*的分隔符分隔。如果1000 +行和1000 +多个* s的分隔符会怎样。

input.txt中

Record: C:/my_files/00_Roll_Tom-values.txt

#RakeBoss-Random as on 12/19/2016
[groups]
met = chk\rel_io_chk, chk\dev_op_io, chk\yuijn7, chk\rft65y
div = chk\ret5cf, chk\plo09i, chk\czo987, chk\lopikm, chk\qzt0kc
rakeonly = chk\r7ynsd, chk\bhtw5h, chk\ko9ibv, chk\plot9q
*******************************************************************************************
Record: C:/my_files/Docker_red-values.txt

#RakeBoss-Check it io.
[groups]
met = chk\rel_io_chk, chk\dev_op_io, chk\yuijn7
div = chk\gzlqvg, chk\k7ygyp, chk\lzg0rp, chk\oli6iv
rakeonly = chk\qzliu0, chk\pl6w6t, chk\bzp0l, chk\dzfbhp
*******************************************************************************************
Record: C:/my_files/456_Milo_123-values.txt

#RakeBoss-Jan 21st Prod
[groups]
met = chk\rel_io_chk, chk\dev_op_io
div = chk\ret5cf, chk\plo09i, chk\cz0o9t, chk\lopikm
rakeonly = chk\ztylcd, chk\hrft9l, chk\zzkkmi
*******************************************************************************************

代码,

file = File.open("C:/rake_check/input.txt", "r")

file.each_line.map do |line|
  next if line.chomp! =~ /^$|#/
  uno, deus, id = line.split(/\*+/) # also tried line.split("*")
  puts second
end

1 个答案:

答案 0 :(得分:1)

myarray = File.read('input.txt').split(/^\*{91}\n/)

(或者,例如,/^\*{5,}\n/"分成五行或更多星号"如果你不是每次都有91个。)

/\*+/表示"一个或多个星号",它有几个危险:你可能会在记录中的某个地方得到一个星号并在其上分开,而你并没有啜饮换行,所以除了第一个以外的每个记录都将从一个开始。