2016-12-08 24 views
1

私は宝くじ番号を入力し、宝くじ会社が提供する宝くじ番号と一致させるプログラムを作成しようとしています。私は行ごとにdocxファイルを読んで、各行に一致する数字を強調表示したい。私はそれに取り組もうとしています。しかし、これまでのところどこにも入らない。私はルビーで正規表現を試してみましたが、あまり運がありませんでした。私はファイルの行を開いて印刷することができましたが、数字は一致しません。ルビーの行ごとの一致数と一致番号

This is exactly what I want to build

puts "What are your lotto numbers?" 
numbers = gets.chomp 
File.open("/Users/pcu/Documents/ruby/number.rtf").each do |line| 
    if numbers[/(19|23/] 
    puts "Has 19 or 23" 
    end 
end 

これは私の完全に間違ったコードです。しかし、私はchompで数字を取得しようとしています。それを変数に変換し、正規表現を使って一致する数を見つけます。次に、ファイルの数字をchompにマッチさせ、ファイルの各行をハイライト表示させる方法を見つけ出す必要があります。強調表示された番号のファイルを印刷することさえできます。

+0

あなたはコードを書いていますか? –

+0

私はプログラマーではありません。私は何かを得るための基本を書いていました。 – codedownforwhat

+1

問題ありません。既に何かを試したことを示す限り、コーディング能力に関係なく、コミュニティは喜んで助けてくれるでしょう。 –

答えて

1

あなたは、2つの別々の問題を抱えて:

  • ユーザー入力に基づいて正規表現を作成し、RTFファイルの読み取りと書き込み、それを数字
  • のリストを解析するためにそれを使用します。

第一ステップ

当選番号の配列を取得するには、文字列内のすべての番号を見つけるために、scan続いgetsを使用することができます。

受賞番号の配列をお持ちの場合は、join('|')を使用して正規表現を作成できます。ファイル内に3が常に03と書かれていると確信できる場合は、必要に応じてすべての数値に0を1つ追加することができます。rjust

正規表現の先頭と末尾に\bを追加してください。/23/は、それ以外の場合は123と一致します。とにかく3桁の数字はないはずですが、まだいくつかのバグを避けることができます。

gsubの各入賞番号の後にティックを追加し、ティック数をsort行追加することができます。

file_content = "18 19 37 21 39 29 39 
22 33 83 29 92 03 12 
83 74 56 29 34 94 92 
94 72 57 65 38 85 95 
18 26 37 28 39 29 39 
22 33 83 29 92 03 12 
83 74 56 29 34 94 92 
94 72 57 65 38 85 95 
18 26 37 28 39 29 39 
22 33 83 29 92 03 12 
83 74 56 29 34 94 92 
94 72 57 65 38 85 95 
18 26 37 28 39 29 39 
22 33 83 29 92 03 12 
83 74 56 29 34 94 92 
94 72 57 65 38 85 95 
18 26 37 28 39 29 39 
22 33 83 29 92 03 12 
83 74 56 29 34 94 92 
94 72 57 65 38 85 95" 

puts "Please input winning numbers, separated by a space. Example : 1 2 3 4 5 6 7" 
numbers = gets.chomp.scan(/\d+/).map{|d| d.rjust(2,'0')} 
puts 

regex = /(\b#{numbers.join('|')}\b)/ 

puts file_content.gsub(regex,'\1✓').each_line.sort_by{|l| l.count('✓')}.reverse 

これは、出力:

18✓ 19✓ 37 21✓ 39✓ 29✓ 39✓ 
18✓ 26 37 28 39✓ 29✓ 39✓ 
18✓ 26 37 28 39✓ 29✓ 39✓ 
18✓ 26 37 28 39✓ 29✓ 39✓ 
18✓ 26 37 28 39✓ 29✓ 39✓ 
83 74 56 29✓ 34 94 92 
22 33 83 29✓ 92 03 12 
22 33 83 29✓ 92 03 12 
83 74 56 29✓ 34 94 92 
83 74 56 29✓ 34 94 92 
22 33 83 29✓ 92 03 12 
22 33 83 29✓ 92 03 12 
83 74 56 29✓ 34 94 92 
83 74 56 29✓ 34 94 92 
22 33 83 29✓ 92 03 12 
94 72 57 65 38 85 95 
94 72 57 65 38 85 95 
94 72 57 65 38 85 95 
94 72 57 65 38 85 95 
94 72 57 65 38 85 95 

第二ステップ

あなたのコードは、テキストファイルで正常に動作している場合、あなたはあなたの第二の問題に取り組むために行くことができます。

RTFに関連するプロジェクトはすべてかなり古く、まだ機能しているかどうかはわかりません。 Yomuかもしれません。

docxファイルの場合、docxというプロジェクトが役に立ちます。

また、Wordで読み取ることのできるHTMLファイルを作成することもできます。

+0

docxファイルから数値を取得する方法はありますか? File.openを作成し、それをfile_contentという変数にします。 – codedownforwhat

+0

docxはバイナリファイルです。基本的なテキストエディタで開くと、なぜ 'File.open'を使うことができないのか分かります。それにはライブラリが必要です。私の答えの更新を参照してください。 –

+0

ありがとうございました。私はこれをすべて見て、たくさん学ぶでしょう! – codedownforwhat

関連する問題