[ruby] Wie kann man Ruby-Text aus einer Datei einkopieren

OP #4497077
Lesenswert?

Ich habe > 2000 Zeilen Struct-Definitionen, die in ~20 Array eingefügt 
werden. Das Ganze ist in einer eigenen Quell-Datei options.rb.

Die Array-Variablen werden in einer Methode gebraucht.

Ich will diese Methode aber übersichtlich halten und deswegen die > 2000 
Zeilen nicht einfach dort hinein kopieren, sondern den Text aus 
options.rb wie in c includen.

Nur: wie bekommt man das hin?
Gast #4497385
Lesenswert?

Ich benutze für solche config-Sachen JSON files. Die sind lesbar, und 
ruby kann das schön parsen.

im controller zum beispiel:
require 'json'
@data_hash = JSON.parse(File.read('parameter_config.json'))

und in der view dann einfach mit :parameter (oder wie auch immer der key 
heisst)

Vielleicht ist das eine Alternative?
OP #4497452
Lesenswert?

devynF schrieb:
> Ich benutze für solche config-Sachen JSON files. Die sind lesbar, und
> ruby kann das schön parsen.

Das wäre eine Möglichkeit, die Sache anders zu lösen, aber die Daten, 
die da importiert werden sollen, sind sperrig und häßlich - die bekommt 
man auch mit JSON nicht übersichtlich.

Mein erster Versuch ging schief:
1
eval(File.open('./options.rb').read)

Es gibt das Ergebnis der letzten Zuweisung zurück, aber keine der 
Variablen war hinterher bekannt - weiß der Teufel, warum.

Der zweite Versuch:
Aus jeder Variablen eine Methode bauen, die die Variable konstruiert und 
den ganzen Kladaradatsch in einen Modul verpackt. Den dann requiret und 
includet.

So gehts...
Gast #4497862
Lesenswert?

OT:
Dieses "such doch bei Google" gerufe geht irgendwann mal noch nach 
hinten los.

Mir passierts jetzt schon häufig das bei ner Suche nach einem Problem 
zwar passende Fragestellungen gefunden werden aber als Antwort nur auf 
Google verwiesen wird.

Was glaubt ihr wo die tollen Lösungen bei Google herkommen - da hat 
tatsächlich mal jemand auf eine Frage mit der Lösung geantwortet...
OP #4497888
Lesenswert?

Tek schrieb:
> Was glaubt ihr wo die tollen Lösungen bei Google herkommen - da hat
> tatsächlich mal jemand auf eine Frage mit der Lösung geantwortet...

Meine Lösung steht hier: 
Beitrag "Re: [ruby] Wie kann man Ruby-Text aus einer Datei einkopieren"

Aber ich kann dir nur voll zustimmen, gar zu oft findet man eine Frage 
mit dem Problem, das man gerade hat und am Ende vielleicht auch noch 
eine Notiz, es sei gelöst, aber wie die Lösung aussieht, wird 
verschwiegen.

Manche Leute schaffen es eben gerade mit Ach und Krach bis zum eigenen 
Bauchnabel zu denken...
(Firma: Torrox.de) #4498096
Lesenswert?

Uhu U. schrieb:
> Diese Formulierung aus dem Eingangsposting ist jedenfalls ziemlich
> eindeutig:
>
>> den Text aus options.rb wie in c includen.

Ich verstehe dann aber wirklich auch nicht, warum
1
require 'options.rb'

oder
1
include 'options.rb'

für Dich nicht funktioniert! Das sind die üblichen Wege.

Und ich denke, da ist ein Unterschied, ob jemand nur zur Nutzung einer 
Suchmaschine aufruft, oder die Suchmaschine für Dich bedient und Dir das 
Ergebnis der Suche liefert.

Und da es jetzt schon mindestens 2 Leute gibt, die Deine Frage 
offensichtlich nicht verstanden haben, könnte es auch an Deiner Frage 
liegen. Das sollte man als Fragesteller zumindest mal im Bereich des 
Möglichen behalten und nicht gleich rumpoltern, wenn die Antwort nicht 
passt!

schönen Abend,
Torsten
OP #4498550
Lesenswert?

Torsten R. schrieb:
> Ich verstehe dann aber wirklich auch nicht, warum
> require 'options.rb'
>
> oderinclude 'options.rb'
>
> für Dich nicht funktioniert!

Weil require eben nicht wie das c-include funktioniert - was ja 
keineswegs neu ist - und include in ruby nochmal was völlig anderes ist.

Wenn man Ruby nicht kennt, dann sollte man sich eine Antwort auf die 
Frage schlicht sparen und einen rotzig auf Google zu verweisen 
funktioniert eben auch nicht, um sich als den großen Crack zu 
profilieren.
Gast #4498828
Lesenswert?

Uhu U. schrieb:
> ...dann sollte man sich eine Antwort auf die
> Frage schlicht sparen und einen rotzig auf Google zu verweisen
> funktioniert eben auch nicht, um sich als den großen Crack zu
> profilieren.


...und dann gibt es noch die Leute, denen man am Besten überhaupt nicht 
antwortet, weil jede Antwort mit Widerworten und Undank quittiert 
wird.
OP #4498960
Lesenswert?

Dass diese Trivialkonstellation funktioniert, weiß ich und ich hatte 
vor, das genau so zu machen.

In der ursprünglichen options.rb wurde zunächst ein Struct-Typ definiert 
und anschließend wurden die Arrays mit solchen Structs geladen. Dazu 
noch etliche Kommentare, das wars. Die Daten enthalten teilweise 
ziemlich lange String- und Array-Literale.

Wenn ich options.rb direkt in rdebug geladen habe, konnte ich alle 
Variablen zugreifen.

Wenn options.rb per require im Hauptmodul geladen wurden, waren sie nach 
dem require nicht mehr definiert.

Eine mögliche Ursache könnten die Variablen sein: sie waren nicht global 
- also als $variable - definiert. Ich habe sporadisch Probleme mit dem 
Gültigkeitsbereich von Variablen gehabt, wenn ich Variable ohne $ auf 
Dateilevel verwendet habe.

Die Lösung: in options.rb werden die Arrays jeweils in einer Methode 
aufgebaut, die das Array als Ergebnis zurück gibt. Das Ganze in einen 
Modul verpackt und per require und include im Hauptmodul geladen.

Die Idee, das mit einer Art c-include dort zu machen, wo die Daten 
gebraucht werden, führt bei ruby in die Irre.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren