2016-12-08 31 views
1

Ich versuche, ein Programm zu erstellen, wo ich meine Lottozahlen eingeben und sie mit den Lotteriezahlen, die von der Lotteriegesellschaft zur Verfügung gestellt werden, übereinstimmen. Ich möchte eine docx-Datei Zeile für Zeile lesen und die Zahlen markieren, die in jeder Zeile übereinstimmen. Ich habe versucht, mich damit auseinanderzusetzen. Aber bis jetzt sind keine wo angekommen. Ich habe versucht, Regex in Ruby auszuarbeiten, aber ich hatte nicht viel Glück. Ich konnte Zeilen einer Datei öffnen und ausdrucken, aber keine Zahlen.Zeile für Zeile und übereinstimmende Zahlen in Ruby analysieren

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 

Dies ist Code meines völlig falsch. Aber ich versuche, die Zahlen in einem chomp zu bekommen. Verwandle das in eine Variable und benutze Regex, um die passenden Zahlen zu finden. Dann muss ich versuchen, herauszufinden, wie die Zahlen in der Datei mit dem chomp übereinstimmen und dann jede Zeile in der Datei hervorheben. Vielleicht drucken Sie sogar eine Datei mit den markierten Nummern aus.

+0

Di Sie einen Code schreiben? –

+0

Ich bin kein Programmierer. Ich habe die Grundlagen für den Versuch geschrieben, alles zum Laufen zu bringen. – codedownforwhat

+1

Kein Problem.Solange du zeigst, dass du bereits etwas ausprobiert hast, wird die Community dir helfen, unabhängig von deinen Programmierfähigkeiten. –

Antwort

1

Sie haben 2 separate Probleme:

  • einen regulären Ausdruck erstellen, basierend auf Benutzereingaben und es verwenden, es eine Liste von Zahlen
  • lesen zu analysieren und eine RTF-Datei schreiben.

erster Schritt

auf eine Reihe von Gewinnzahlen zu erhalten, können Sie gets von scan gefolgt verwenden, um alle Zahlen im String zu finden.

Wenn Sie ein Array von Gewinnzahlen haben, können Sie join('|') verwenden, um eine Regexp zu erstellen. Wenn Sie sicher sind, dass 3 immer als 03 in die Datei geschrieben wird, können Sie bei Bedarf eine Null zu jeder Nummer mit rjust hinzufügen.

Wir fügen \b am Anfang und am Ende der Regex hinzu, um sicherzustellen, dass nur ganze Zahlen übereinstimmen: würde sonst 123 entsprechen. Es sollte sowieso keine 3-stellige Nummer geben, aber es könnten trotzdem einige Bugs vermieden werden.

Sie können dann ein Häkchen nach jeder Gewinnnummer mit gsub und sort Ihre Zeilen, um wie viele Ticks vorhanden sind, hinzufügen.

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 

Es gibt:

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 

zweiten Schritt

Wenn Ihr Code mit einer Textdatei einwandfrei funktioniert, können Sie gehen auf Ihr zweites Problem in Angriff zu nehmen.

Alle Projekte im Zusammenhang mit RTF scheinen ziemlich alt zu sein, keine Ahnung, ob sie noch funktionieren. Yomu könnte.

Für docx-Dateien könnte das Projekt docx Ihnen helfen.

Als Alternative könnten Sie eine HTML-Datei schreiben, die Word auch lesen kann.

+0

Gibt es eine Möglichkeit, die Zahlen aus einer docx-Datei zu bekommen? File.open und dann in eine Variable namens file_content? – codedownforwhat

+0

docx ist eine Binärdatei. Versuchen Sie, es mit einem einfachen Texteditor zu öffnen, und Sie werden sehen, warum Sie 'File.open' nicht verwenden können. Du brauchst dafür eine Bibliothek. Siehe Update in meiner Antwort. –

+0

Vielen Dank für Ihre Hilfe. Ich werde all das durchsehen und viel lernen! – codedownforwhat

Verwandte Themen