2016-11-27 3 views
3

Dies könnte eine dumme Frage sein, aber ich konnte es seit gestern nicht tun. Ich habe eine Eingabedatei, die einige Daten enthält, die ich arbeiten müssen, und es soll wie folgt aussehen:Speichern Eingabe in Variablen Ruby

x <= 42 & x >= 20 | x < 50 
y > 10 & y < 20 
z < 100 & z > 101 
y > 5 
w <= 0 
a >= 0 | a <= 10 

Ich brauche es in Anweisungen trennen zu können, nach diesem Format: <variable> <operator> <number>, und jeder dieser Anleitung ist getrennt, wie Sie sehen können, entweder durch eine '&', ein '|' oder eine neue Zeile (was in meinem Fall dasselbe wie '|' bedeutet).

Beachten Sie, dass die x Variable in 2 verschiedenen Zeilen erscheint, aber es bezieht sich auf die gleiche x, sollte man die andere nicht überschreiben.

Meine wilde Vermutung ist es, durch den Text zu iterieren und in Stücke von 4 Strings zu teilen, und das wäre es. Das Problem dabei ist, dass ich nicht weiß, wie ich mit neuen Zeilen in Ruby umgehen soll.

Ich habe versucht:

lines = [] 


begin 
    file = File.open(ARGV.at(0)) 

    while (t = file.gets.chomp) 
    lines << line.split 
    end 


    file.close 
rescue => e 
    puts e 
end 

Und das würde zurückkehren und Anordnung von Linien, jede Spaltung in Worte zu fassen, aber ich muss noch die Newline bekommen.

TL; DR: die vorherige Eingabe Da muss ich in der Lage sein, etwas zu tun:

x = (LeftInfinite.new(42,']').intersection(RightInfinite.new('[',20).union(LeftInfinite.new(50,')') 

Für die erste Zeile zum Beispiel

+0

Ist dies die erwartete Ausgabe, oder ist dies ein Eingang? – mutantkeyboard

+0

So sieht die Datei aus, von der ich lese. – Stieg

+0

Können Sie teilen, wie die gewünschte Ausgabe aussehen soll? Bitte .. – zee

Antwort

0

Sie Datei Inhalt von Zeilen lesen

File.readlines(ARGV.at(0)).each do |line|

oder alle Inhalte erhalten und teilen sie es

lines = File.read(ARGV.at(0)).split("\n")

Oben ist gut für kleine Dateien, weil der Inhalt einer Datei in den Speicher geladen wird. Für große Dateien müssen Sie diesen Ansatz verwenden

File.foreach(ARGV.at(0)).with_index do |line, line_num| 

end 
+0

Danke für die Antwort, aber ich lese bereits aus einer Datei, mein Problem ist es, den Inhalt dieser Zeilen in Variablen zu speichern, die ich verwenden kann. – Stieg