bestimmte Strings herausfiltern, mit PHP geht's

V

vik

Aktives Mitglied
Thread Starter
Dabei seit
20.06.2005
Beiträge
179
Reaktionspunkte
1
Hallo Leute.

Ist es eigentlich mit AppleScript möglich bestimmte Stings herauszufiltern.

Z.B. wenn ich aus einem file nur Zeilen die mit "@t" beginnen in einem anderen Dokument abspeichern, dann "@t" löschen und zwischen jeder Zeile eine Leerzeile einfügen möchte.

Vielen Dank

Gruß
 
such mal in der Doku nach regulären Ausdrücken.

Kann leider kein AppleScript.

Edit: Für solche Dinge (und noch viel mehr) ist Perl übrigens geeignet.
 
vik schrieb:
Ist es eigentlich mit AppleScript möglich bestimmte Stings herauszufiltern.
Z.B. wenn ich aus einem file nur Zeilen die mit "@t" beginnen in einem anderen Dokument abspeichern, dann "@t" löschen und zwischen jeder Zeile eine Leerzeile einfügen möchte.
Mit "Vanilla AppleScript" ist das machbar aber etwas muehselig - sehr viel einfacher waere es ein AppleScript fuer ein echtes Textprogramm, wie z. B. BBEdit zu schreiben.
Nur mit AS-Bordmitteln ist die Prozedur in etwa folgende:
Code:
tell application "Finder"
set myText to read file [Pfad_zum_Textfile]
end tell
set newText to ""
set countP to count of paragraphs of myText
repeat with i from 1 thru countP
if characters 1 thru 2 of paragraph i of myText = "@t" then
set newText to (newText & (paragraph i of myText) & return)
end if
end repeat
-- jetzt muessten wir in der Variable "newText" alle Zeilen abgespeichert haben, die im Originaltext mit "@t" beginnen
-- Schritt 2: Kreation eines neuen Textes, in dem alle "@t" durch "" ersetzt werden:
set finalText to ""
set countP to count of paragraphs of newText
repeat with j from 1 thru countP
set newLine to (characters 3 thru -1 of (paragraph j of newText) & return)
set finalText to (finalText & newLine)
end repeat
-- Die Variabile "finalText" enthaelt das Resultat der Textoperationen.
-- Du kannst sie in einen neuen File oder ins Clipboard schreiben
Das ganze ist aus dem Stand und auf einer Windose geschrieben - also ohne Gewaehr - einfach mal ausprobieren ;)

Frohes scripten
Farid
 
chebfarid schrieb:
Mit "Vanilla AppleScript" ist das machbar aber etwas muehselig - sehr viel einfacher waere es ein AppleScript fuer ein echtes Textprogramm, wie z. B. BBEdit zu schreiben.
Nur mit AS-Bordmitteln ist die Prozedur in etwa folgende:
Code:
tell application "Finder"
set myText to read file [Pfad_zum_Textfile]
end tell
set newText to ""
set countP to count of paragraphs of myText
repeat with i from 1 thru countP
if characters 1 thru 2 of paragraph i of myText = "@t" then
set newText to (newText & (paragraph i of myText) & return)
end if
end repeat
-- jetzt muessten wir in der Variable "newText" alle Zeilen abgespeichert haben, die im Originaltext mit "@t" beginnen
-- Schritt 2: Kreation eines neuen Textes, in dem alle "@t" durch "" ersetzt werden:
set finalText to ""
set countP to count of paragraphs of newText
repeat with j from 1 thru countP
set newLine to (characters 3 thru -1 of (paragraph j of newText) & return)
set finalText to (finalText & newLine)
end repeat
-- Die Variabile "finalText" enthaelt das Resultat der Textoperationen.
-- Du kannst sie in einen neuen File oder ins Clipboard schreiben
Das ganze ist aus dem Stand und auf einer Windose geschrieben - also ohne Gewaehr - einfach mal ausprobieren ;)

Frohes scripten
Farid
hallo chebfarid!

vielen dank für deinen ausführlichen lösungsweg.
sag mal, wie kommt es dazu, dass du dich so gut mit as auskennst und am pc arbeitest? ... und kannst du mir auch möglicherweise ein AppleScript-buch empfehlen?
Gruß
 
vik schrieb:
sag mal, wie kommt es dazu, dass du dich so gut mit as auskennst und am pc arbeitest? ... und kannst du mir auch möglicherweise ein AppleScript-buch empfehlen?
Gruß
MacUser seit 12 Jahren aber leider kann man nicht immer seinen Arbeitgebern die Wahl der Produktionsmittel vorschreiben ;)
Was das Buch angeht: imho das beste auf dem Markt ist "Matt Neuburg - AS the definitive guide".

Frohes scripten
Farid
 
chebfarid schrieb:
Mit "Vanilla AppleScript" ist das machbar aber etwas muehselig - sehr viel einfacher waere es ein AppleScript fuer ein echtes Textprogramm, wie z. B. BBEdit zu schreiben.
Das ganze ist aus dem Stand und auf einer Windose geschrieben - also ohne Gewaehr - einfach mal ausprobieren ;)

Frohes scripten
Farid

hallo
leider klappt es nicht ganz mit dem Script. Ich habe aber dieses BBEdit Lite 6.1 (freeware) auf der Platte. Wenn es damit einfacher ist - ist mir auch recht.
 
Hier ein Script, mit dem ich BBEdit ganze Ordner nach bestimmten Strings durchsuchen und die gefundenen Strings mit einem neuen Text ersetzen lasse. (Praktisch, wenn man z.B. einen Link in zig Html-Seiten aktualisieren will):
Code:
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
Das Script sollte sich ohne Probleme auch für einzelne Textfiles umstricken lassen. Wenn Du nicht weiter kommen solltest, laß es mich wissen.

Frohes scripten
Farid
 
(* für Testzwecke bitte in TextEdit einfügen:
@t zeile 1
@e zeile 2
@t zeile 3
@b zeile 4
@u zeile 5
@t zeile 6
@4 zeile 7
@t zeile 8
@t zeile 9
----------
Ausgabe:
zeile 1
zeile 3
zeile 6
zeile 8
zeile 9
*)

guten Abend,

ich habe es jetzt mit TextEdit soweit geschafft, dass das geöffnete Dokument richtig gefiltert wird.
Code:
set gefiltert to ""

tell application "TextEdit"
	activate
	set inhalt to every paragraph of text of document 1
	set fileName to the name of document 1
	-- display dialog fileName
end tell

repeat with i from 1 to (count inhalt)
	set Zeile to item i of inhalt
	
	
	-- if ((item 2 of Zeile exists) and (item 2 of Zeile = "t")) then
	(* wenn dokument eine leere zeile hat - bekomme ich eine fehlermeldung¬
	wie vermeide ich so was? *)
	if ((item 2 of Zeile ? "") and (item 2 of Zeile = "t")) then

		-- lösche @t
		set newZeile to "" & (get text 3 through (count Zeile) of Zeile) 
           -- gefiltertes zusammen
		set gefiltert to (gefiltert & newZeile & return)
		
	else if item 2 of Zeile = "" then
		
	else
		
		-- exit repeat -- bringt bei Leerzeilen nur Abbruch des Scripts (falsch)
	end if
	get gefiltert -- Ausgabe für ScriptEditor nur Test
	
	
end repeat

tell application "TextEdit"
	make new document at the beginning
	set the text of the front document to gefiltert
	close front window saving in file saving ask -- wie ich den namen fileName für das neue Dok einsetze  - keine Ahnung
end tell

jetzt habe ich noch einpaar Fragen:

1. ich möchte das Ganze gerne als Programm abspeichern so, dass ich nur meine Files drauf ziehen brauche und es wird im neuen UnterOrdner "x" eine gefilterte Version meiner Daten mit dem gleichen Namen erscheinen.

Als Ordneraktion ist auch gut. Sogar mit einem Finder-Plug-in kann ich leben. Aber jedes einzelne Dok aufzurufen und dann noch den Namen zu vergeben ist mit zu viel. Hat jemand Vorschläge?

2. wenn mein Dokument Leerzeilen hat - wird das Script unterbrochen. Wie löse ich das Problem. Ist aber nicht so wichtig, da in meinen Files keine Leerzeilen vorkommen. Da muss ich irgendwie aus der Schleife raus ohne sie abzubrechen...
 
Ciao Vik,
ich habe Deinen Beispieltext so verstanden, daß der zu erstzende Text immer die Form "@x " hat (aber in jedem Fall kannst Du das leicht an andere Strings anpassen)
Wenn Du Dein Skript mit der Zeile "on open [reference]" beginnst und mit "end open" beendest und es dann als Application" speicherst, erhältst Du ein Droplet, auf das Du die Files ziehen kannst, die Du bearbeiten willst.
Code:
on open myFiles
	set p to (path to desktop)
	-- Der Ordner "TestFolder" muß vorher auf dem Schreibtisch angelegt werden, sonst signalisiert AS einen Fehler
	set savepath to (p as string) & "TestFolder:"
	
	-- die Liste "myFiles" enthält alle Files, die auf das Script "gedragt" worden sind, mit der Variabile "aFile" werden sie jetzt einer nach dem anderen abgearbeitet
	repeat with aFile in myFiles
		tell application "TextEdit"
			open aFile
			set n to name of document 1
			set myText to text of document 1
			set newText to ""
			set numPars to count of paragraphs of myText
			repeat with i from 1 to numPars
				if (paragraph i of myText is not "") and (character 1 of paragraph i of myText = "@") then
					set newText to (newText & (characters 4 thru -1 of paragraph i of myText) & return)
				else
					set newText to (newText & (paragraph i of myText) & return)
				end if
				
			end repeat
			
			set newDoc to (make new document at the beginning)
			set the text of the front document to newText
			set completeSavepath to (savepath & n)
			close newDoc saving in completeSavepath
			close document 1
		end tell
	end repeat
end open
Eventuelle Leerzeilen machen mir kein Problem, ich habe sie allerdings 1:1 in den neuen Text übernommen, Du wolltest sie löschen?

Frohes scripten
Farid
 
endlich hat es geklappt!

vielen vielen dank. dieses script ist doch der hammer. habe, wie du sagtest, dein script ein bisschen an meine vorstellung angepasst und als programm agbespeichert. es läuft, wie es sein muss! jetzt kann ich es bestimmt auch als OrdnerAktion verwenden, oder muss es noch modifiziert werden?

noch mal vielen dank!

gibt es irgendwo eine beschreibung der AppleScript-Befehle in digitaler form zum herunterladen? ich habe die applescript anleitung von apple - AppleScriptLanguageGuid.pdf. ist es alles, was man kostenfrei bekommen kann?

gute nacht
vik
 
Ganz kurz:

Strings rausfiltern- rotfl

Ok- das wars auch schon.

Danke.
 
vik schrieb:
etzt kann ich es bestimmt auch als OrdnerAktion verwenden, oder muss es noch modifiziert werden?
Nichts zu danken, schoen, dass es geklappt hat!
Die Ordneraktionen funktionieren nach einem etwas anderen Prinzip: die Syntax wird Dir klar wenn Du im ScriptEditor das Dictionary der "Standard additions" (ich glaube, die Beschreibung ist dort) oeffnest.
Ein wichtiger Unterschied ist, dass Du fuer eine Ordneraktion Dein Script als "Script" und nicht als "Application" abspeichern musst.
vik schrieb:
Gibt es irgendwo eine beschreibung der AppleScript-Befehle in digitaler form zum herunterladen? ich habe die applescript anleitung von apple - AppleScriptLanguageGuid.pdf. ist es alles, was man kostenfrei bekommen kann?
Die Referenz von Apple ist schon ziemlich komplett. Tausende von Tips und Infos findest Du bei www.macscripter.net, dort gibt es auch mehrere Foren zu allen Fragen, die mit AS zu tun haben.

Good scripting
Farid
 
Zurück
Oben Unten