Leerzeichen per AppleScript löschen

simonnelli

Aktives Mitglied
Thread Starter
Dabei seit
30.08.2004
Beiträge
660
Reaktionspunkte
15
Hallo MU!

Ich versuche mit AppleScript Leerzeichen in einem Text zu löschen. Kriege es aber trotz ein paar Beispielscripten nicht hin. Ich möchte folgendes tun:

"Falls Zeile mit Leerschlag beginnt, dann erstes Zeichen löschen"

Kann mir jemand behilflich sein? Ich bin leider ziemlicher AS-Anfänger.

lg
Simon
 
Im Terminal:

sed 's/^ *//g' /Datei1.txt > /Datei2.txt
 
  • Gefällt mir
Reaktionen: simonnelli
Hallo Pill

Danke für den Vorschlag, ich würde dies jedoch vorallem beim Verfassen von E-Mails benutzen (Diktatprogramm stellt oft Leerschlag voran). Deshalb bin ich auf der Suche nach einer Lösung mit AppleScript.
 
Benutze doch das Skript von Pill und lege es in Automator als neuen Service an. Damit kannst Du die Funktion in jeder Anwendung nutzen, welche Services unterstützt.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: simonnelli
Nur AS:

Ich hab auch die Tendenz: Wenn es mit AppleScript geht, dann kein »do shell script« mit sed, grep and friends.

Wenn es nur um Leerzeichen geht, sollte es folgender Handler tun:

Code:
on clean_left_spaces(the_text)
	set od to AppleScript's text item delimiters
	set AppleScript's text item delimiters to " "
	set temp to every text item of the_text
	try
		repeat
			set curr to item 1 of temp
			if curr = "" then
				set temp to rest of temp
			else
				exit repeat
			end if
		end repeat
	on error
		return ""
	end try
	set r to temp as text
	set AppleScript's text item delimiters to od
	return r
end clean_left_spaces


Wenn auch andere »white space«-Zeichen links weg sollen:

Code:
on clean_left_ws(the_text)
	set counter to 1
	set od to AppleScript's text item delimiters
	set AppleScript's text item delimiters to {" ", tab, character id 13, character id 10}
	set temp to every text item of the_text
	set AppleScript's text item delimiters to od
	repeat with J from 1 to count temp
		set curr to item J of temp
		if curr = "" then
			set counter to counter + 1
		end if
	end repeat
	try
		return text counter thru -1 of the_text
	on error
		return ""
	end try
end clean_left_ws

Gruß, Jürgen
 
Das klappt, danke. Ist aber sehr langsam
 
Dann probier doch bitte mal die Variante mit dem Service und sed, die ist in der Regel um ein Vielfaches fixer.
 
Die Variante wäre mir lieber, da diese wahrscheinlich schneller ist. Leider bekomme ich das Script nicht zum laufen.
 
Zuletzt bearbeitet von einem Moderator:
Das AppleScript in den Service zu packen wird Dir an der Stelle nicht helfen, das wird dadurch auch nicht schneller. Du musst schon anstelle von AppleScript die "Run Shell Script" Action verwenden (siehe Screenshot in meinem früheren Posting).
 
Das habe ich ausprobiert, ist sehr langsam (d.h. dauert bis zu 5s)
 
Habs gerade nochmal getestet:

Am MBP (Intel Core 2 Duo) ist es auch bei wenigen Zeichen langsam, auf dem Mac Pro (2 x 2.66 GHz Dual-Core Intel Xeon) hingegen schnell. Ist diese Aktion so CPU lastig?
 
Hallo Pill

Danke für den Vorschlag, ich würde dies jedoch vorallem beim Verfassen von E-Mails benutzen (Diktatprogramm stellt oft Leerschlag voran). Deshalb bin ich auf der Suche nach einer Lösung mit AppleScript.

Das liegt dann wohl eher am genutzten Programm. Hast du mal kontrolliert wie eine solch "beschnittene" Datei mit anderer Formatierung beim Empfänger ankommt? Hat dieser dann vielleicht zwei zusammenhängende Worteohne Leerzeichen dazwischen? Das passiert bei Programmen die eine Zeilentrennung per LF erzeugen, weil sie keinen automatischen Zeilenumbruch machen.
 
Von wie vielen Zeilen Text reden wir denn? Ich habe bei mir (iMac i3) getestet und bei bis zu 1000 Zeilen war der Service angenehm fix. Zum Spass habe ich in BBEdit mal ein 10000 Zeilen Dokument erstellt, dann wird es zugegeben arg langsam.
 
Das liegt dann wohl eher am genutzten Programm. Hast du mal kontrolliert wie eine solch "beschnittene" Datei mit anderer Formatierung beim Empfänger ankommt? Hat dieser dann vielleicht zwei zusammenhängende Worteohne Leerzeichen dazwischen? Das passiert bei Programmen die eine Zeilentrennung per LF erzeugen, weil sie keinen automatischen Zeilenumbruch machen.

Nee ist in Apple Mail langsam. Es geht nicht um Zeilenumbrüche (die sind korrekt) sondern um Leerschläge zu Beginn einer Zeile (Wenn anstatt per Diktierbefehl mit der Returntaste ein Umbruch gemacht wird, stellt Dictate natürlich immer einen Leerschlag voran).
 
Von wie vielen Zeilen Text reden wir denn? Ich habe bei mir (iMac i3) getestet und bei bis zu 1000 Zeilen war der Service angenehm fix. Zum Spass habe ich in BBEdit mal ein 10000 Zeilen Dokument erstellt, dann wird es zugegeben arg langsam.

Ist bereits bei ca 50. Zeilen langsam auf dem MBP, werde aber nochmal Testen (ist nicht mein System).
 
Du kannst auch via TextEdit gehen, dann geht das noch einfacher:


tell application "TextEdit"
delete (character 1 of every paragraph of text 1 of document 1 where character 1 of it is " ")
end tell
 
Zurück
Oben Unten