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

私を正しい方向に向けるための提案/ヘルプをいただければ幸いです。私はこのアプローチに執着していません。それを行う他の方法がある場合は、提案してください...私はルビーを学んでいるので、ルビーの提案を好みます。

ありがとう

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 に答える