Forum: PC-Programmierung [ruby] Wie kann man Ruby-Text aus einer Datei einkopieren


von Uhu U. (uhu)


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?

von Eric B. (beric)


Lesenswert?

Google kaputt?

"Ruby include" liefert z.B. 
http://www.tutorialspoint.com/ruby/ruby_modules.htm

von Uhu U. (uhu)


Lesenswert?

Eric B. schrieb:
> Google kaputt?

Au Mann. Wie wärs, wenn du erst mal versuchtest zu verstehen, worum es 
geht, ehe du auf diese strunzdumme Tour kommst?

> http://www.tutorialspoint.com/ruby/ruby_modules.htm

Solche "Experten" liebe ich... Frech, aber nicht die Spur von einer 
Ahnung.

von devynF (Gast)


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?

von Uhu U. (uhu)


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...

von Eric B. (beric)


Lesenswert?

Uhu U. schrieb:
> Eric B. schrieb:
>> Google kaputt?
>
> Au Mann. Wie wärs, wenn du erst mal versuchtest zu verstehen, worum es
> geht, ehe du auf diese strunzdumme Tour kommst?

Au mann, wie wäre es dann damit erstmal das Problem richtig zu 
beschreiben.

von Uhu U. (uhu)


Lesenswert?

Eric B. schrieb:
> Au mann, wie wäre es dann damit erstmal das Problem richtig zu
> beschreiben.

Bei Leuten, die nicht lesen können, nutzt das nichts.

Diese Formulierung aus dem Eingangsposting ist jedenfalls ziemlich 
eindeutig:

> den Text aus options.rb wie in c includen.

: Bearbeitet durch User
von Tek (Gast)


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...

von Uhu U. (uhu)


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...

: Bearbeitet durch User
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


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

: Bearbeitet durch User
von Uhu U. (uhu)


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.

von Bellis Perennis (Gast)


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.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

options.rb:
1
A = [ 1, 2, 3 ]

test.rb:
1
require_relative 'options.rb'
2
3
puts A.inspect

Test
1
$ ruby test.rb
2
[1, 2, 3]

: Bearbeitet durch User
von Uhu U. (uhu)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Du kannst nur Kostanten, Module, Klassen oder Methoden per require 
laden. Die sauberste Lösung wäre wohl:
1
module Options
2
  A = 1
3
  B = 2
4
  C = 3
5
end
1
require_relative 'options'
2
3
puts Options::A
=> 1

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.