【发布时间】:2011-07-08 04:50:35
【问题描述】:
所以我用 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
|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
这是我一直在测试的代码的 sn-p:
# 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 类型的数据和 类型nil 的数据。这是为什么?
【问题讨论】:
-
file_as_string(fn)可以简单地为File.read(fn)。您也可以省略Array.new的两行。