0

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

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 中,我可以使用这个命令来实现它:

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

但现在我正试图用 Ruby 来做这件事。我怎样才能做到这一点?

4

3 回答 3

4

这可以解决问题:

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

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

于 2012-08-09T03:06:34.950 回答
2
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
于 2012-08-09T02:43:51.507 回答
0

假设您将其作为文本文件读入脚本中,我是否正确?为了让您开始,File.open(textfile).each do (code code code) end 从那里开始,看看 evfwcqcg 在拆分这些行时所说的话:

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

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

于 2012-08-09T03:01:24.860 回答