用ruby直接读取一个带有两个变量的文件

时间:2014-12-13 05:28:08

标签: ruby

使用How can I read a file with Ruby?,读取文件然后逐行打印。

但我的要求不同。

我有一个类似内容为千行的txt文件。

ABC 123
XYZ 234

因此,使用下面的代码,我可以打印整行。

File.open("input.txt", "r") do |infile|
    while (line = infile.gets)
        puts "#{counter}: #{line}"
        counter = counter + 1
    end
end

但我需要一些东西将column1分配给A,将column2分配给B:

File.open("input.txt", "r").each_line do |A B|
        puts "#{A} has the value of #{B}"
end

我该怎么做。

通常,我需要像bash脚本中的ruby函数:

#!/usr/bin/env bash

while read A B 
do
  echo "$A has the value of $B"
done < input.txt

3 个答案:

答案 0 :(得分:2)

你想要这样的东西吗?

File.open("my/file/path", "r").each_line do |line|
  var1, var2 =line.split(" ")
end

如果没有,请查看使用CSV lib: http://www.sitepoint.com/guide-ruby-csv-library-part/

答案 1 :(得分:1)

你可以这样做:

fname = 'tmp'
str =<<_
cat 1
dog 2
pig 3
_

File.write(fname, str)

IO.foreach(fname) {|l| puts "%s has the value of %s" % l.split }
cat has the value of 1
dog has the value of 2
pig has the value of 3

答案 2 :(得分:0)

只要您不需要存储值以供将来参考,您就可以非常轻松地在空间中分割线条,并将其用作数组来拉取两个变量。此外,如果您使用每一行进行迭代,它将为您节省循环中出现轻微错误的可能性,但您始终可以用循环替换它。

File.open("my/file/path", "r").each_line do |line|
  vars=line.split(" ")
  puts "#{vars[0]} has the value of #{vars[1]}"
end