PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Template Replacer



TheSniffer
04-06-2005, 19:46
Hallo,

ich bin neu in diesem Forum und habe gleich ein kniffeliges Problem.
Ich möchte ein Shell-Script erstellen, was eine Art Template Replacer darstellt.
Ich möchte auf einer HP mehrere (500 HTML-Dateien mit identischem Aufbau) von einem alten Design auf ein neues umstellen.

Dazu hatte ich mir folgenden Algorythmus ausgedacht:
- ermittle alle Dateien in einem Verzeichnis
- öffne diese nacheinander

LOOP pro Datei
-> aus aktueller geöffneter Datei ermittle mir die Bilddatei <img src="Bildname">
(alles zwischen den "" auschneiden und in Variable ablegen)
-> Datei wieder schließen aber Namen merken
-> Neue Datei öffnen (als Template vorhanden)
-> in diesem Template den Platzhalter [Pic_Name] durch den "geparsten" Bildnamen ersetzen
-> Datei unter dem "gemerkten" Dateinamen abspeichern und somit Ausgangsdatei überschreiben.
ENDLOOP

Den Teil mit dem Template habe ich schon gelöst, dass man in einem neuen Template bestimmte Platzhalter ersetzen kann, aber beim parsen und überschreiben fehlt mir noch eine passende Umsetzung.

Falls jemand helfen kann oder ein schon existierends Programm kennt, wäre das extrem hilfreich.

Greetz

TheSniffer

Romanday
05-06-2005, 03:30
Hallo,
Falls jemand helfen kann oder ein schon existierends Programm kennt, wäre das extrem hilfreich.

Greetz

TheSniffer

Du kannst jedes Tool, Programm, Programmierspache nehmen, welche mit
REGEX umgehen kann.
Wenn dir SEd nicht liegt, würde ich es mit VI (langsamer) machen.
AWK geht natürlich auch, kann aber leider keine Rückreferenzierung.

Bequem wird wird es mit Perl oder PHP, aber der Code bläht sich dann ein wenig auf.

Auf jeden Fall ne gute Übung um sich mit Sonderzeichen vertraut zu machen.:D

TheSniffer
05-06-2005, 11:43
Moin,

also die Tools waren mit schon bekannt.
Allerdings mit Regex kann man doch nicht aus einer bestimmten Zeile den Text rausschneiden.

Bsp:
<td><img src="images/pic.jpg" widht="100" height="175" border="0"></td>

Mein Bash-script parst die die Dateien mittlerweile zeilenweise, aber eine Regex die mir nur das images/pic.jpg aus der Zeile auschneidet un in ner Variable ablegt habe ich noch nicht hinbekommen.

Ich habe keine Lust alle Dateien in dem Verzeichnis von Hand in einem Programm zu ändern, dazu habe ich ja das Bash-Script.


Ein anderes Problem ist noch, das ausgeschnittene Bild dann in das neue Template zu schreiben und die Datei dann unter dem Namen abzuspeichern aus dem das Bild geholt wurde und somit die ursprüngliche Datei mit den neuen Informationen zu überschreiben.

Den Algo hatte ich ja bereits gepostet.

Greetz

TheSniffer

buffer_7
22-06-2005, 12:40
Hallo TheSniffer,

die Tools sollen auch nicht ausschneiden, sondern für das "search & replace" vorbereiten. das Suchen und ersetzen, kannst Du dann eben, wie von Romanday schon erwähnt, mit vi, sed oder gar awk erledigen.

mit sed

z.B.:
Vari="Bildname"

sed s/PLATZHALTER/$NEUES_BILD/g zu_ändernde_Datei.

wenn Du dies in die Schleife richtig einbaust,
dann sollte alles ruckzuck gehen.

mfg
buffer_7

michael.sprick
22-06-2005, 13:55
geht es jeweils um ein Bild pro HTML Datei?

Dann kann man das mit einem ganz simplen Regex machen...




#!/usr/bin/perl
use strict;
use warnings;

my $Quellverzeichnis = 'quelle';
my $Zielverzeichnis = 'ziel';
my $Templatedatei = 'template.tmpl';


opendir(DH,$Quellverzeichnis);
while(my $Entry = readdir(DH))
{
if($Entry =~ /.*html?$/)
{
local $/ = undef;
open(FH,"$Quellverzeichnis/$Entry");
my $Inhalt = <FH>;

if($Inhalt =~ m/<img src="(.*?)"/i)
{
my $Bildname = $1;

open(TEMPLATE,$Templatedatei);
my $Template = <TEMPLATE>;
$Template =~ s/\[PIC_NAME\]/$Bildname/i;

open(AUSGABE,">$Zielverzeichnis/$Entry");
print AUSGABE $Template;

close(FH);
close(TEMPLATE);
close(AUSGABE);
}
}
}




mal so ins blaue...

Das Skript öffnet alle *.html / *.htm Dateien im Quellverzeichnis und schaut, ob ein <img> Tag enthalten ist. Wenn ja, wird der Platzhalter im Template gegen den Bildnamen ersetzt und die Datei dann unter gleichem Namen im Zielverzeichnis gespeichert....