在ruby中解析多行固定宽度文本文件

pgpifvop  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(292)

我试图用ruby解析一个多行固定宽度的文件,但似乎我无法解析我需要的信息。当信息在一行中时,我可以很好地解析。例如:

Name      LastName         DOB
John      Doe              01/01/2001
Jane      Doe              01/02/2002

但我面临的挑战是,当文件确实具有如下结构时

This message needs to be                 AccountId: 7854639
parsed in a single key                   Phone: 823972839563
of the json that I want to produce       Email: test@test.com

多行文字总是在同一坐标上,并且是动态的。例如,不确定如何解析该值并Map为json值。

mmvthczy

mmvthczy1#

这里有一个简单化的、非高尔基式的方法:

freeform_text = str.split('\n').map do |s|
  m = s.match(/^(.*)\s+(.*):(.*)$/)
  m[1] ? m[1].strip : ''
end.join(' ')

# Produces:

# "This message needs to be parsed in a single key of the json that I want to produce"

还有其他更惯用的方法,但这给了您一个方向的提示。

2ekbmq32

2ekbmq322#

str = "This message needs to be          AccountId: 7854639
parsed in a single key                   Phone: 823972839563
of the json that I want to produce       Email: test@test.com"

p str.scan(/([^\s]+:[^\n]+)/).flatten

请参阅ruby演示。

相关问题