2017-06-11 5 views
-1

Mein Programm soll empfangenen Beispielcode ausführen und die Ergebnisse dann in neuer Datei speichern. Wenn das Ergebnis des ausgeführten Beispielcodes eine Zahl ist, funktioniert es, aber wenn es sich um eine Zeichenfolge handelt, wird das Ergebnis nicht in der Datei gespeichert (es wird eine neue Datei erstellt, der Inhalt ist jedoch leer).Ergebnisse in Datei in Ruby speichern

Wie man es macht, um alle Arten zu speichern?

class ExecuteProgram 

    # opens recieved code and saves it to a variable 
    @code = File.open("files/prog.rb", "r"){ |file| file.read } 

    # executes recieved code 
    @number = eval(@code) 

    # saves result to file 
    def self.save_code(filename="result.rb") 
    directory_name = "result" 
    Dir.mkdir(directory_name) unless File.exists?(directory_name) 
    file = File.new(directory_name + "/" + filename, "w") 
    file.puts(@number) 
    file.close 
    puts @number 
    end 

    ExecuteProgram.save_code("result.rb") 

end 

Thanks :)

+0

sieht nicht so aus Es sollte ein Problem mit Strings haben. Können Sie auch den Code teilen, der die Zeichenfolge nicht erzeugt? – ndn

+0

Nein, kann nicht sein, dass Saiten dieses Problem hier verursachen. –

+0

Das Ziel des Programms ist, jeden Code auszuführen, den es erhalten wird, also habe ich versucht, anderen Code, komplizierter oder einfach zu setzen, der Summe von Zahlen oder Schnur zurückgibt. Beispiel Inhalt von prog.rb: print "Hallo Welt" –

Antwort

0

Versuchen Sie den Code in ein proc mit so etwas wie die Umwandlung:

@number = eval("Proc.new {#{@code}}")

Dann Speichern in die Datei mit file.puts(@number.call)

+0

Ich fügte hinzu, aber jetzt bekomme ich Fehler: "execute_program.rb: 7: in' eval ': versucht, Proc-Objekt ohne einen Block zu erstellen (ArgumentError) " –

+0

Entschuldigung, aktualisiert. – OneNeptune

+0

Funktioniert immer noch nicht :( –