Ruby:为什么我的数组中所有字符串的末尾都有一个`nil`?

时间:2011-03-03 16:30:37

标签: ruby arrays string null

所以我在Ruby中编写了一些代码,将文本文件拆分为单独的行,然后根据分隔符对这些行进行分组。然后将此输出写入数组,该数组将传递给方法,该方法将HTML吐出到文本文件中。当我尝试在不同的方法中使用gsub来替换HTML文本文件中的占位符和record数组中的值时,我开始遇到问题 - Ruby一直告诉我,我传递的是nil值。在尝试调试该程序的这一部分几个小时之后,我决定去别处看看,我想我正在做些什么。该程序的修改版本发布在下面。

以下是输入文本文件的示例:

26188
WHL
1
Delco

B-7101
A-63
208-220/440
3
285  w/o pallet
1495.00

C:/img_converted/26188B.jpg
EDM Machine Part 2 of 3
AC Motor, 3/4 Hp, Frame 182, 1160 RPM
|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|

以下是我一直在测试的代码片段:

# function to import file as a string

def file_as_string(filename)
    data = ''
    f = File.open(filename, "r")
    f.each_line do |line|
    data += line
end
return data
end

Dir.glob("single_listing.jma") do |filename|
content = file_as_string(filename)
content = content.gsub(/\t/, "\n")
database_array = Array.new
database_array = content.split("|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|")
for i in database_array do
    record = Array.new
    record = i.split("\n")
    puts record[0]
    puts record[0].class     end
end

当运行该代码时,我得到了这个输出:

john@starfire:~/code/ruby/idealm_db_parser$ ruby putsarray.rb
26188
String
nil
NilClass

...这意味着record中的每个数组位置显然都具有类型为String的{​​{1}} 类型的数据。这是为什么?

1 个答案:

答案 0 :(得分:2)

您的database_array维度比您想象的要多。

您的结束标记|--|--|...|--|后面有换行符。所以,file_as_string会返回类似这样的内容:

"26188\nWHL...|--|--|\n"

然后在节的结尾处split()成为这样的东西:

["26188\nWHL...1160 RPM\n", "\n"]  # <---- Note the last element here!

然后再次拆分,但"\n".split("\n")给出一个空数组,其第一个元素返回nil

相关问题