Ruby文本文件解析方法

Ruby文本文件解析方法,ruby,excel,parsing,csv,Ruby,Excel,Parsing,Csv,我有一个文本文件,其中有很多行看起来像第一个示例,只有几行看起来像第二个示例(注意**只是显示我要查找的字段,它们在实际文件中与此不同) 22034布巴C BC-022**OWL软件**470 0.00**6**0.00**1****37.95** 22489布巴C卑诗省-**小兔子布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布** 我的目标是将

我有一个文本文件,其中有很多行看起来像第一个示例,只有几行看起来像第二个示例(注意**只是显示我要查找的字段,它们在实际文件中与此不同)

22034布巴C BC-022**OWL软件**470 0.00**6**0.00**1****37.95**
22489布巴C卑诗省-**小兔子布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布布**
我的目标是将**包围的字段提取成一种格式(可能是csv),以便将其作为工作表添加到现有Excel电子表格中

我的问题是我不知道如何使用gsub、split、tr、scan、match等提取所需的数据

我最初的想法是,当我解析每一行时,我会删除一个空格的第四个实例(我找不到代码),然后删除/跳过第一个<和最后一个>,然后尝试删除下两个字段,保留1,删除下一个,保留剩下的2

所有这些似乎都是达到最终结果的极其艰难的途径

我不想用精确的代码来解决这个问题,我更想了解当你研究这类问题时你会采用的方法,以及你会使用什么工具。(长条、gsub等)


非常感谢您的帮助。

空格分隔文件,是吗?这不是最重要的。。。最优的格式

无论如何,我会使用regex来阻塞
**OWL-SOFTIE**
字段

[7] pry(main)> m = s.match /BC-\d*\s(.*?)\s</
=> #<MatchData "BC-022 OWL SOFTIE <" 1:"OWL SOFTIE">

[8] pry(main)> m.captures[0]
=> "OWL SOFTIE"
总共:

[13] pry(main)> [s.match(/BC-\d*\s(.*?)\s</).captures[0]] + s.split[-4..-1].select.with_index {|x,i| i!=1 }
=> ["OWL SOFTIE", "6", "1", "37.95"]
[13]pry(main)>[s.match(/BC-\d*\s(.*)\s[“猫头鹰软件”、“6”、“1”、“37.95”]

(如果您对输入文件有任何控制权,请查看是否可以将其用空格以外的东西分隔:)

空格分隔的文件,嗯?这不是最…最佳的…格式

无论如何,我会使用regex来阻塞
**OWL-SOFTIE**
字段

[7] pry(main)> m = s.match /BC-\d*\s(.*?)\s</
=> #<MatchData "BC-022 OWL SOFTIE <" 1:"OWL SOFTIE">

[8] pry(main)> m.captures[0]
=> "OWL SOFTIE"
总共:

[13] pry(main)> [s.match(/BC-\d*\s(.*?)\s</).captures[0]] + s.split[-4..-1].select.with_index {|x,i| i!=1 }
=> ["OWL SOFTIE", "6", "1", "37.95"]
[13]pry(main)>[s.match(/BC-\d*\s(.*)\s[“猫头鹰软件”、“6”、“1”、“37.95”]

(如果您对该输入文件有任何控制权,请查看是否可以将其用空格以外的字符分隔:)

您只有一个麻烦的字段,其中的字数可变,因此请从split开始:

a = "22034 BUBBA C BC-022 OWL SOFTIE <N/A> <N/A> <N/A> 470 0.00 6 0.00 1 37.95".split

您只有一个字数可变的麻烦字段,因此请从拆分开始:

a = "22034 BUBBA C BC-022 OWL SOFTIE <N/A> <N/A> <N/A> 470 0.00 6 0.00 1 37.95".split
使用
#split
/
#join
对继续:

a='22034 BUBBA C BC-022 **OWL SOFTIE** <N/A> <N/A> <N/A> 470 0.00 **6** 0.00 **1** **37.95**'.split
[ a[4..-10].join( ' ' ), a[-4], a[-2], a[-1] ].join ' '
# => "**OWL SOFTIE** **6** **1** **37.95**"
a='22034 BUBBA C BC-022**OWL软件**470 0.00**6**0.00**1****37.95**.拆分
[a[4..-10]。加入(“”),a[-4],a[-2],a[-1]。加入“”
#=>“**猫头鹰软件****6****1****37.95**”
使用
#split
/
#join
对继续:

a='22034 BUBBA C BC-022 **OWL SOFTIE** <N/A> <N/A> <N/A> 470 0.00 **6** 0.00 **1** **37.95**'.split
[ a[4..-10].join( ' ' ), a[-4], a[-2], a[-1] ].join ' '
# => "**OWL SOFTIE** **6** **1** **37.95**"
a='22034 BUBBA C BC-022**OWL软件**470 0.00**6**0.00**1****37.95**.拆分
[a[4..-10]。加入(“”),a[-4],a[-2],a[-1]。加入“”
#=>“**猫头鹰软件****6****1****37.95**”

Perfect,因为这是最直截了当的完美,所以选择这一个,因为这是最直截了当的