将行拆分为列

  • 本文关键字:拆分 ruby
  • 更新时间 :
  • 英文 :


我有一个文件,内容是这样的:

first;48548a;48954a,48594B
second;58757a;5875b
third;58756a;58576b;5867d;56894d;45864a

我想像这样更改格式:

first;48548a
first;48954a
first;48594B
second;58757a
second;5875b
third;58756a
third;58576b
third;5867d
third;56894d
third;45864a

在 Bash 中,我可以使用此 cmmand 来实现它:

awk -F; '{for(n=2; n<=NF; n++) { printf("%s;%sn",$1,$n); }}' input.txt

但现在我正在尝试用 Ruby 这样做。我该怎么做?

这可以解决问题:

IO.readlines("input.txt").each do |line|
  num, *data = line.strip.split(/[;,]/)
  data.each do |s|
    puts "#{num};#{s}"
  end
end

请注意,@evfwcqcg和我都在考虑很可能是拼写错误的内容,即逗号作为第一行的记录分隔符。

s = <<-STR
first;48548a;48954a,48594B
second;58757a;5875b
third;58756a;58576b;5867d;56894d;45864a
STR
def disp(number, *elems)
  puts elems.map { |e| "#{number};#{e}" }
end
ar = s.split.each {|x| disp(*x.split(/[;,]/)) }
# => first;48548a
# => first;48954a
# => first;48594B
# => second;58757a
# => second;5875b
# => third;58756a
# => third;58576b
# => third;5867d
# => third;56894d
# => third;45864a

我假设您将其作为文本文件读取到脚本中是否正确?为了帮助您入门,File.open(textfile).each do (code code code) end从那里,看看evfwcqcg通过像这样拆分行来表达什么:

File.open(textfile).each do |line| x = line.split(/[;,]/) end

我认为。我不太确定,但我认为这个论点是正则表达式??请有人解释。然后,这会将行分解为自己的数组(一次一个)。从那里,您只需循环浏览它们,将line[0]保持在每行打印行的开头。

相关内容

  • 没有找到相关文章

最新更新