Inhalt mehrerer HTML-Dokumente ändern

S

Schlawiner

Mitglied
Thread Starter
Dabei seit
09.12.2006
Beiträge
27
Reaktionspunkte
0
Hallo, ich hoffe, dass ich im richtigen Forum bin.

Ich habe einige HTML-Dokumente, bei denen ich identischen Inhalt ändern möchte (in diesem Fall die URL zu einem Link).

Ich hatte mal Dreamweaver ausprobiert, wo man das super einfach machen konnte.
Nun habe ich aber keinen Dreamweaver und suche eine Alternative.

Quasi ein Suchen&Ersetzen über mehrere Dokumente hinweg.

Ich habe keine Ahnung ob und v. a. wie das mit Automator funktionieren könnte. Oder ob es mit einem anderen Freeware-Tool funktioniert.

Über hilfreiche Tipps wäre ich sehr dankbar!
 
Das folgende Script funktioniert mit BBEdit (ich nehme an, auch mit seinem kleinen Bruder "TextWrangler") - einfach den Ordner auswählen, der die zu bearbeitenden Files enthält:
PHP:
tell application "Finder" 
     activate 
     set f to (choose folder) as alias 
     set theFiles to every item of f 
     set c to count of theFiles 
      
     display dialog "Inserisci il testo da trovare/sostituire:" default answer "" with icon 1 
     set searchstring to text returned of the result 
      
     display dialog "Inserisci il testo di sostituzione:" default answer "" with icon 1 
     set replacestring to text returned of the result 
      
     repeat with i from 1 to c 
          set myFile to item i of theFiles as alias 
          tell application "BBEdit" 
               activate 
               open myFile 
               tell window 1 of application "BBEdit" 
                    replace searchstring using replacestring 
               end tell 
               close window 1 saving yes 
          end tell 
     end repeat 
end tell
Frohes Scripten
Farid
 
Danke.
Ich kenne mich mit AppleScript leider kaum aus.
Hab dein Script mal ausprobiert, er meckert aber in der Zeile
"replace searchstring using replacestring"
immer "Es wurde „Zeilenende“ erwartet, aber ein „Identifier“ wurde gefunden."
 
Schlawiner schrieb:
Hab dein Script mal ausprobiert, er meckert aber in der Zeile "replace searchstring using replacestring"
immer "Es wurde „Zeilenende“ erwartet, aber ein „Identifier“ wurde gefunden."
:confused: Hm...
Vieleicht sind beim kopieren/einfügen die Zeilenenden verwackelt. Probier's nochmal hiermit:
PHP:
tell application "Finder"
	activate
	set f to (choose folder) as alias
	set theFiles to every item of f
	set c to count of theFiles
	
	display dialog "Bitte den Suchtext eingeben:" default answer "" with icon 1
	set searchstring to text returned of the result
	
	display dialog "Bitten den Substitutionstext eingeben:" default answer "" with icon 1
	set replacestring to text returned of the result
	
	repeat with i from 1 to c
		set myFile to item i of theFiles as alias
		tell application "BBEdit"
			activate
			open myFile
			tell window 1 of application "BBEdit"
				replace searchstring using replacestring
			end tell
			close window 1 saving yes
		end tell
	end repeat
end tell
PS: Ich gehe davon aus, daß Du BBEdit installiert hast, sonst kann das Script nicht funktionieren...

Frohes schaffen
Farid
 
Nee, okay, ich hatte BBEdit durch Taco HTML Edit ersetzt, mit der Hoffnung, mit dem klappte das auch. Aber dann wohl nicht. :(
Trotzdem danke.

Hat sonst noch jemand ne Idee?
 
Ich empfehle Textmate…*

Allerdings kann auch Textwrangler bei kompletten Projekten eine Suchen & Ersetzen Aktion durchführen. sollte mich wundern, wenn BBEdit es nicht hätte.

Bei Textmate einfach den kompletten Ordner mit den betreffenden HTML-files öffnen und schon gehts los…*Alles kein Problem… So oder so.

Bei Textwrangler geht es ähnlich zu…*(hatte es schon lange nicht mehr benutzt…)

Cheers,
Martin
 
Der Befehl
Code:
replace searchstring using replacestring
bezieht sich auf das AppleScript Dictionary fuer BBEdit. Wenn Du stattdessen ein anderes Programm scripten willst musst Du ueberpruefen, ob es einen aehnlichen Befehl fuer diese Anwendung gibt und die entsprechende Syntax verwenden. Da Textwrangler aus der gleichen Softwarefirma kommt wie BBEdit, gehe ich davon aus (ohne es aus erster Hand zu wissen), dass die AppleScript-Kommandos fuer beide Programme identisch sind.
Probieren geht ueber studieren ;)
Farid
 
Okay, ich hab mir jetzt mal TextWrangler geladen (die anderen sind ja alle kostenpflichtig) und das Skript gestartet.

Soweit klappt es wunderbar (danke!), nur erscheint dann folgende Fehlermeldung:

„TextWrangler“ hat einen Fehler erhalten: An attempt was made to modify a read-only object (MacOS Error code: -10003)

Kann mir einer sagen, was das heißt?
Die Dateien liegen in meinem Home-Verzeichnis und sind nicht schreibgeschützt.
 
Ah, ich glaube, er hängt bei der ersten Datei, die kein HTML-Dokument, sondern ein Bild ist.
Kann ich das Skript auf Textdokumente beschränken? Wenn ja, an welcher Stelle?
 
Schlawiner schrieb:
Ah, ich glaube, er hängt bei der ersten Datei, die kein HTML-Dokument, sondern ein Bild ist.
Kann ich das Skript auf Textdokumente beschränken? Wenn ja, an welcher Stelle?
z.B. so:
PHP:
repeat with i from 1 to c 
        set myFile to item i of theFiles as alias
        if kind of myFile is "HTML document" then
        tell application "BBEdit" 
            activate 
            open myFile 
            tell window 1 of application "BBEdit" 
                replace searchstring using replacestring 
            end tell 
            close window 1 saving yes 
        end tell 
        end if
end repeat
Frohes scripten
Farid
 
Irgendwie passiert jetzt gar nichts. :(
TextWrangler wird nicht mal geöffnet.
Anscheinend stimmt der Filter nicht. Hast du noch ne Idee? Durchsucht das Skript so auch die Unterordner?


Ich hab jetzt folgendes verwendet:

PHP:
tell application "Finder"
	activate
	set f to (choose folder) as alias
	set theFiles to every item of f
	set c to count of theFiles
	
	display dialog "Bitte den Suchtext eingeben:" default answer "" with icon 1
	set searchstring to text returned of the result
	
	display dialog "Bitten den Substitutionstext eingeben:" default answer "" with icon 1
	set replacestring to text returned of the result
	
	repeat with i from 1 to c
		set myFile to item i of theFiles as alias
		if kind of myFile is "HTML document" then
			tell application "TextWrangler"
				activate
				open myFile
				tell window 1 of application "TextWrangler"
					replace searchstring using replacestring
				end tell
				close window 1 saving yes
			end tell
		end if
	end repeat
end tell
 
Schlawiner schrieb:
Irgendwie passiert jetzt gar nichts. :(
TextWrangler wird nicht mal geöffnet.
Anscheinend stimmt der Filter nicht.
Hab' ein englisches System, kann sein, daß "Html document" auf deutsch anders heißt: schau Dir einfach mal im Finder einen von Deinen Files an und benutze die Bezeichnung, die Du im Infofenster findest ("HTML Dokument" ?)

Durchsucht das Skript so auch die Unterordner?
Nein.

Frohes scripten
Farid
 
Okay. Es heißt "HTML-Dokument" :)
Das frohe Skripten musst du mir leider nochmal abnehmen. Denn gibt es eine Möglichkeit, dem Skript mitzuteilen, dass es auch die Unterordner mit einbezieht?
 
Schlawiner schrieb:
Das frohe Skripten musst du mir leider nochmal abnehmen. Denn gibt es eine Möglichkeit, dem Skript mitzuteilen, dass es auch die Unterordner mit einbezieht?
Ne ne, ich erklär dir wie's geht und dann machst Du das schön selber :D ;)
Hier ein ganz allgemeines Beispiel für die Loop-Bearbeitung von Ordnern, Unterordnern und Files. Im Prinzip mußt Du nur den "TextWrangler"-Teil Deines Skripts in den richtigen Handler einsetzen:
PHP:
property numFiles : 0
property numFolders : 0

(* === BLOCK 1: Das Hauptskript ===
Ein Loop durchläuft den vom Anwender ausgewählten Ordner, wird ein File gefunden startet der Handler in Block 2, wird ein Unterordner gefunden startet Block 3 *)
set meinOrdner to choose folder with prompt "Bitte den zu bearbeitenden Ordner auswählen:"
tell application "Finder"
	set n to name of meinOrdner
end tell
(* der folgende Handler muß mit "my" aufgerufen werden: so weiß das Skript, daß es sich um ein intern definiertes Kommando handelt und nicht um eine Anweisung an den Finder, der nicht wüßte, was er mit diesem Kommando anfangen soll... *)
my ordnerJob(meinOrdner)
(* nur zu Testzwecken, um das Ergebnis zu kontrollieren *)
display dialog "Der Ordner \"" & n & "\" enthält" & return & numFolders & " Unterordner" & return & numFiles & " Files."

(* === BLOCK 2: Handler zur Filebearbeitung ===
(in diesem Beispiel addiert der Handler den Wert +1 zur Variable numFiles) *)
on fileJob(einFile)
	set numFiles to (numFiles + 1)
end fileJob

(* === BLOCK 3: Handler zur Ordnerbearbeitung ===
Wird aufgerufen wenn das Skript beim Durchlauf auf einen Unterordner trifft - findet er darin einen File ruft er Handler 2, findet er einen weiteren Unterordner ruft er SICH SELBST auf, usw... *)
on ordnerJob(derOrdner)
	tell application "Finder"
		(* "Try"-Block, damit das Skript im Fehlerfall keine "beunruhigenden Meldungen" produziert *)
		try
			set numFolders to (numFolders + 1)
			set alleItems to every item of derOrdner
			repeat with subItem in alleItems
				if class of subItem is not folder then
					my fileJob(subItem)
				else
					my ordnerJob(subItem)
				end if
			end repeat
		end try
	end tell
end ordnerJob

Frohes skripten
Farid
 
Zurück
Oben Unten