1

私は小さなAppleScriptプログラムに取り組んでいます。このプログラムでは、テキスト行と数字を入力できます。OS X のテキスト読み上げ機能は、入力した数字によって制御されるプリミティブなリバーブを使用して、それを大声で言います。(詳細については、私のコードを調べてください。)

1つのことを除いて、すべてがうまくいきます。私は、コンピュータに言わせることをテキスト ファイルに書き込もうとしています。次に、そのテキスト ファイルをテキスト フィールドにロードして、言いたいことを書き込もうとしています。

書き込み部分は問題なく動作します。テキスト ファイルを作成し、コンピューターに伝えた内容をそこに入れます。問題は読み方です。

現在のように、読み取り部分は次のようになります。

try
    open for access prevSFile
    set defToSay to (read prevSFile)
end try

何も起こりません。「try」を削除しようとすると、エラー -500 が表示され、プログラムが停止します。

これが私のコードです:

--define variables
set defToSay to ""
set prevSFile to "~/library/prevSFile.txt"

--Fetch info from save file:
try
    open for access prevSFile
    set defToSay to (read prevSFile)
end try

--Display dialoges:
display dialog "What do you want to say?" default answer defToSay
set whatToSay to the text returned of the result
display dialog "How many times do you want to overlay it?" default answer "5"
set overlays to the text returned of the result

--Create/edit save file:
do shell script "cd /"
try
    do shell script "rm " & prevSFile
end try
do shell script "touch " & prevSFile
do shell script "echo " & whatToSay & " >> " & prevSFile

--Say and kill:
repeat overlays times
    tell application "Terminal"
        do script "say " & whatToSay
    end tell
    delay 0.01
end repeat
delay (length of whatToSay) / 5
do shell script "killall Terminal"
4

1 に答える 1

0

あなたの問題はここにあります。AppleScriptパスは「/」を使用せず、AppleScriptは確かに「〜」を認識しません。

"~/library/prevSFile.txt"

コードのその部分は次のようになります...

set prevSFile to (path to home folder as text) & "Library:prevSFile.txt"
try
    set defToSay to (read file prevSFile)
end try

AppleScriptの適切なパスができたので、シェルコマンドのパスを修正する必要があります。毎回ファイルをrmしてタッチする必要はないことに注意してください。echoコマンドをリダイレクトするときに「>」を使用するだけで、ファイルが上書きされます。また、スペースがある場合は、パスの「引用符で囲まれた形式」を使用する必要があります。

do shell script "echo " & quoted form of whatToSay & " > " & quoted form of POSIX path of prevSFile

ただし、そのスクリプトでは多くの不要な処理を行っています。これが私があなたのコードを書く方法です。幸運を。

property whatToSay : ""
property numberOfTimes : 5

--Display dialoges:
display dialog "What do you want to say?" default answer whatToSay
set whatToSay to the text returned of the result

repeat
    display dialog "How many times do you want to overlay it?" default answer (numberOfTimes as text)
    try
        set numberOfTimes to the (text returned of the result) as number
        exit repeat
    on error
        display dialog "Please enter only numbers!" buttons {"OK"} default button 1
    end try
end repeat

repeat numberOfTimes times
    say whatToSay
end repeat
于 2012-09-03T20:29:14.253 に答える