web-dev-qa-db-ja.com

AppleScriptを使用してテキストファイルに書き込む方法を教えてください。

以上です。 AppleScriptを使用してテキストファイルに書き込む方法を教えてください。

私はぐるぐる試しましたが、答えは何年も前のようであり、今日、何が好ましいイディオムであるべきか本当にわかりません。

19
Juan A. Navarro
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

それとのインターフェースは、以下でクリーンアップできます...

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
23
Philip Regan

純粋なAppleScriptの短いバージョン:

set myFile to open for access (choose file name) with write permission
write "hello world" to myFile
close access myFile

ネイティブの1つのコマンドソリューションはないようです。代わりに、ファイルを開いて後で閉じる必要があります。

9
flori

また、ファイルにテキストを少しだけ吐きたい場合は、シェルを使用するのが簡単なハックであることも学びました。

do Shell script "echo TEXT > some_file.txt"
8
Juan A. Navarro

@JuanANavarro。

シェルを使用する場合は、テキストとファイルパスに引用形式を使用する必要があります。これにより、たとえばファイル名にスペースを使用したり、テキスト内のアポストロフィなどの文字を使用したエラーを防ぐことができます。

set someText to "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."

set textFile to "/Users/USERNAME/Desktop/foo.txt"
do Shell script "echo  " & quoted form of someText & " >  " & quoted form of textFile

上記のスクリプトは正常に動作します。


私が持っていなかった場合&引用された形式のsomeText

しかし、代わりに&someTextを使用しました。次のエラーが発生します。

エラー "sh:-c:行0:予期しないEOF一致する` `の検索中

sh:-c:1行目:構文エラー:予期しないファイルの終わり "番号2

"I've"内のアポストロフィは、コマンドの一部と見なされます。


もしわたしが持っていたら

textFileを "/ Users/USERNAME/Desktop/some foo.txt"として私のファイルパス(スペースに注意してください。)そして&引用符で囲まれた形式のtextFileがありませんでしたが、代わりに&textFileを使用しました

次に、ファイルが書き出されると、「some foo.txt "ではなく、「some」という名前のファイルに書き込まれます。

8
markhunte

私が実行しているシェルスクリプトは、PowerBook G4でループを300000回実行すると遅くなりました;)が、もちろんそれは書く方が速く、時々理にかなっています。次のようにシェル文字をエスケープすることもできます。

シェルスクリプト "echo"と引用符で囲まれた形式のfoobar& ">> some_file.txt"

美的理由から私は

シェルスクリプト「#...」を実行するように指示する

しかし、私はまだ確認していません(私が信じていること)、「シェルスクリプトを実行する」が「Finderを伝える」のブロック内にある場合、サブシェルを作成するのはFinderプロセスであることなどです。 「シェルスクリプトを実行するように指示してください」を使用すると、少なくともスクリプトエディターのログの方が見栄えがよくなります。 ;)

3
Zygmunt