我有一个如下所示的文本文件:
STUFF UP HERE
APEXED NUMBER : 123456789
1234567 Bob,Hope E. 123.12
1234567 TOM ROGERS JR III 123.18
1234567 NICE, JOHNATH 4,450.00
1234567 PERDOND, DELLA 4,762.00
1234567 ERICCY, PHIL 4,552.00
STUFF IN BETWEEN
APEXED NUMBER :
1234567 RICHARDSON,FELICIA D 632.00
1234567 EARLEY, RICKY L 140.00
STUFF ON THE BOTTOM
我想读取文件并找到“APEXED NUMBER :”字样,然后我想确定冒号后面是否有数字。例如,在第一个 APEXED NUMBER 之后:出现数字 123456789。我想保存这个号码。然后我希望文件跳过一行并在将信息分配给不同的变量之后读取数字和信息。
然后我想继续浏览文件(逐行),直到找到另一个“APEXED NUMBER”文本并检查它后面是否有数字 - 如果没有我想为这些 APEX NUMBER 分配一个“未知”的值并移动在。
然后将找到的所有文本存储在一个以逗号分隔的数组中。
这是我目前的尝试:
def is_numeric?(object) #used to determine if a number is a number
true if Float(object) rescue false
end
def is_apexed_line?(object) # check if text has "APEXED NUMBER :"
true if object == "APEXED NUMBER :" rescue false
end
def load_file
raw_records = []
infile = File.open("test.txt", "r")
while line = infile.gets
possible_apexed_line = line[2,15]
if is_apexed_line?(possible_apexed_line)
apexed_line = line[2,15]
possible_apexed_number_present = line[18,9]
if is_numeric?(possible_apexed_number_present)
abc_apexed_number = line[18,9]
else abc_apexed_number = "unknown"
end # end of if
record = [apexed_line, abc_apexed_number]
raw_records << record
end # end of if
end
puts raw_records.map {|record| record*','}
infile.close
end
load_file
这会产生:
APEXED NUMBER :, 123456789
APEXED NUMBER :, unknown
但这是迄今为止我所学到的。我正在寻找的结果是这样的:
1234567, BOB, HOPE E., 123.12, APEXED NUMBER :, 123456789
1234567, TOM ROGERS JR III, 123.18 , APEXED NUMBER :, 123456789
1234567, NICE, JOHNATH, 4450.00 ,APEXED NUMBER :, 123456789
1234567, PERDOND, DELLA, 4762.00 , APEXED NUMBER :, 123456789
1234567, ERICCY, PHIL, 4552.00, APEXED NUMBER :, 123456789
1234567, RICHARDSON,FELICIA D, 632.00 , APEXED NUMBER :, unknown
1234567, EARLEY, RICKY L, 140.00 , APEXED NUMBER :, unknown
任何可以为我指明正确方向的建议/帮助将不胜感激。我不喜欢这种方法。如果有其他方法,请建议...我正在学习 ruby,所以我更喜欢 ruby 建议。
谢谢