tags:

views:

37

answers:

3

So, that's it. How can I write to a text file using AppleScript?

I've tried googling around, but answers seem to be years old and I'm not really sure what should be the preferred idiom this days.

+2  A: 
on write_to_file(this_data, target_file, append_data) -- (string, file path as string, boolean)
    try
        set the target_file to the target_file as text
        set the open_target_file to ¬
            open for access file target_file with write permission
        if append_data is false then ¬
            set eof of the open_target_file to 0
        write this_data to the open_target_file starting at eof
        close access the open_target_file
        return true
    on error
        try
            close access file target_file
        end try
        return false
    end try
end write_to_file

Interfacing with it can be cleaned up with the following...

my WriteLog("Once upon a time in Silicon Valley...")

on WriteLog(the_text)
    set this_story to the_text
    set this_file to (((path to desktop folder) as text) & "MY STORY")
    my write_to_file(this_story, this_file, true)
end WriteLog
Philip Regan
Thanks for the code! Very clean and complete. It just amazes me that the interface for io on AppleScript is so terrible!
Juan Antonio
A: 

I've also learned that a quick hack, if one only wants to spit a bit of text to a file, is to use the shell.

do shell script "echo TEXT > some_file.txt"
Juan Antonio
A: 

For me running do shell script was too slow on a PowerBook G4 when executed in a loop 300000 times ;), but of course that's quicker to write which sometimes makes sense. You would also want to escape shell characters like this:

do shell script "echo " & quoted form of foobar & " >> some_file.txt"

and for aesthetic reasons I would use

tell me to do shell script "#..."

but I haven't verified yet (what I believe) that if "do shell script" is in a block of "tell Finder" for example it is Finder process that creates a subshell. With "tell me to do shell script" at least Script Editor log looks better for me. ;)

Zygmunt