0

我有一个如下所示的文本文件:

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​​ 建议。

谢谢

4

1 回答 1

1

这是我的:

File.open(filename).each_line do |line|
    @apexed_number = ('' == $1) ? 'unknown' : $1 if line =~ /APEXED NUMBER :\s*(\d*)/
    puts [$1,$2,$3,@apexed_number].join(', ') if line =~ /(\d+)\s{2,}(.*?)\s{2,}([\d,.]+)/
end
于 2012-05-12T02:49:17.307 回答