在一行中按字符串读取字符串 - Ruby

时间:2017-01-19 22:32:32

标签: ruby

我有一个输入文本文件“input.txt”,如下所示:

for prod in itertools.product(*[['a', 'b', 'c', 'd', 'e', 'f']]*len_of_char ):
   print prod

如何从每一行中提取第一个,第二个和第三个字符串?

此代码将整行映射到数组的一个字段:

Country Code ID QTY
FR  B000X2D 75 130
FR  B000X2E 75 150

哪个输出:

f = File.open("input.txt", "r")
line_array = []
f.each_line { |line| line_array << line }
f.close
puts line_array[1]

此外,如何根据数量编号将一行拆分为更多行

FR  B000X2D 75 130

以便输出为:

max(quantity) = 50 per line

2 个答案:

答案 0 :(得分:4)

如果这是空格分隔的,那么分解起来应该很容易:

File.readlines('input.txt').map do |line|
  country, code, id, qty = line.chomp.split(/\s+/)

  [ country, code, id.to_i, qty.to_i ]
end

您也可以轻松拒绝任何您不想要的行,或者选择您要执行的行,此外,这有助于删除标题:

File.readlines('input.txt').reject do |line|
  line.match(/\ACountry/i)
end.map do |line|
  country, code, id, qty = line.chomp.split(/\s+/)

  [ country, code, id.to_i, qty.to_i ]
end.select do |country, code, id, qty|
  qty <= 50
end

答案 1 :(得分:2)

如果这些是制表符分隔的条目,请使用CSV类。 CSV代表&#34;逗号分隔值&#34;但是你可以提供自己的分隔符

require 'csv'

CSV.foreach("fname", :row_sep => "\t") do |row|
  # use row here...
end

请参阅https://ruby-doc.org/stdlib-2.0.0/libdoc/csv/rdoc/CSV.html