2012-04-02 7 views
2

Ich schreibe ein Kommandozeilen-Entwicklungsprogramm für mein Team mit Ruby.Dateimanipulation mit Ruby

Ich versuche, ein HTML-Dokument auf dem Dateisystem zu überprüfen und neuen <script> Tag vor dem wie </head>

Etwas hinzufügen:

<html> 
    <head> 
    <script src="...foo.js"></script> 
    <script src="...bar.js"></script> 
    <!-- I WANT TO INSERT NEW TEXT HERE --> 
    </head> 
    <body> 
    </body> 
</html> 

ich mit IO.readlines(file_name) dem Beginnen dachte, jede Zeile zu vergleichen eine Regex, und Einfügen meines neuen Tags vor der </head>. Dann füge das gesamte Array wieder in eine neue Version der Datei ein.

Das klingt übermäßig kompliziert. Wer hat einen besseren Weg?

Für Bonuspunkte wäre es gut, die richtige Einrückungsebene zu haben.

+1

http://stackoverflow.com/a/1732454/576139 –

Antwort

1

In Ihrem speziellen Fall ist es nicht so eine schlechte Idee. Wenn Sie diese spezielle Zeile in der Datei haben, können Sie sie leicht finden, die erforderliche Einrückung vom Anfang der Zeile extrahieren und die gesamte Zeile durch einen anderen Inhalt ersetzen. Aber tu es nicht im Gedächtnis. Sie können es in eine temporäre Datei schreiben, während Sie die Quelldatei lesen, Sie müssen den RAM nicht auffressen.

Wenn der HTML-Kommentar war nur ein Beispiel, und diese Linie nicht da ist, noch Sie das erste Vorkommen von </head > mit <Skript> ... </script > </Kopf > mit einem ersetzen können regexp, muss HTML nicht analysieren. (Das gilt jedoch nur in Ihrem speziellen Fall.) Um ehrlich zu sein, brauchen Sie auch keinen Ruby, weil ein sed-Befehl perfekt für diesen Job ist.

Oder wenn Sie andere Prüfungen durchführen, zum Beispiel, dass das Skript bereits vorhanden ist oder nicht, dann verwenden Sie einen beliebigen HTML-Parser lib/gem. Ich schlage vor, Sie hpricot, wenn Sie das Konzept von jQuery mögen, weil hpricot einen sehr ähnlichen Ansatz hat.

HTH

+0

Dank! Ich ging mit hpricot und grub es wirklich aus. Danke für die ausführliche Antwort. –