ファイルとフォルダのやりとり
あなたのSenseTalkスクリプトは、様々な方法でファイルやファイルシステムオブジェクトとやりとりすることができます。たとえば、ローカルマシンのファイルから保存されたデータを読み取り、そのデータを使用して追加のアクションを実行することができます。ほとんどの場合、下記のAccessing a File as a Containerで説明されている最初の方法を使用してファイルを読み書きすることをお勧めします。
SenseTalkのファイルやファイルシステムオブジェクトを操作するコマンドや関数は、テスト対象のシステム(SUT)ではなく、ローカルマシン上で動作します。
ファイルやファイルシステムの情報にアクセスしたい場合は、File and Folder Referencesを参照してください。
ベストプラクティスとして、SenseTalkスクリプト内で参照される任意のファイルは、スイートウィンドウのリソースペインを通じてEggplant Functionalに追加する必要があります。この方法では、ファイルが指定されたスイートのスイートディレクトリ内のリソースディレクトリに保存されます。SenseTalkはローカルファイルシステム上の他の場所に保存されたファイルにアクセスすることもできますが、リソースディレクトリを使用すると追加の機能が提供されます。詳細はResources Paneを参照してください。
コンテナとしてのファイルへのアクセス
ファイルの内容を操作する最も簡単な方法は、SenseTalkコンテナとして直接ファイルにアクセスすることです。このアプローチを使用すると、単一のコマンドでファイル全体を読むことができます:
put file "/etc/passwd" into passwordInfo
同様に簡単にファイルを書き込むこともできます:
put "0,0,0,0" into file "/tmp/testing/counters"
上記のコマンドは、ディレクトリ/tmp/testing
内にcounters
という名前のファイルを作成し、その中に値0,0,0,0
を書き込みます。/tmp/testing
ディレクトリが存在しない場合、それも作成されます。既に/tmp/testing/counters
というファイルが存在する場合、その前の内容は新しい値で完全に置き換えられるので、この方法を使用するときは注意が必要です。
ファイル内のテキストの任意の部分にアクセスするために、チャンク式を使用することもできます:
add 1 to item 2 of line 1 of file "/tmp/testing/counters"
このコマンドは、ファイルの現在の内容を読み取り、最初の行の2番目のアイテムに1を追加し、変更された値をファイルに戻します。
以下の例は、この方法を使用してファイル全体を一行ずつ読む方法を示しています:
put file "/Users/bob/Desktop/TestRead"intoMyFileVar
put line repeatindex() of MyFileVar into output
log output
end repeat
この例では、各行を読み取った後にログを出力するだけですが、代わりにコンテンツを操作するための追加のコードを追加することもできます。ここでは、その内容がoutput
という変数に格納されます。
コマンドが何らかの理由でファイルに書き込みに失敗した場合(例えば、ファイルに書き込む権限が不足している場合)、the result
はエラーメッセージに設定されます。ファイルが存在しないかアクセスできない場合に、ファイルをコンテナとして読み込むときにthe result
の値もエラーメッセージに設定されます。この場合、ファイル式の値は空として扱われます。
put file "/nonExistent/File" into contents
put the result --> File not found: /nonExistent/File
put contents is empty --> True
コマンドが何らかの理由でファイルに書き込みに失敗した場合(例えば、ファイルに書き込む権限が不足している場合)、the result
はエラーメッセージに設定されます。
ファイルをコンテナとして扱うことは簡単で、多くの状況でうまく機能します。しかし、スクリプトがファイルで大量の読み書きを必要とする場合、それは最も効率的なアプローチではないかもしれません。このような場合、ファイル操作のコマンドと関数で説明されているコマンドを使用することを好むかもしれません。
ファイルの動作の設定
SenseTalkコマンドが新しいファイルを作成するとき、ディレクトリ構造内で作成される任意のフォルダへのアクセスと同様に、ファイルのアクセス許可を制御できます。これらのプロパティの読み取りや設定についての完全な詳細については、The Umask
グローバルプロパティを参照してください。
put file "/tmp/datafile"as dataintomyData
putcontentsas dataintofile "/tmp/binaryFile"
ファイルをコンテナとしてアクセスする際、テキストは読み書きの両方でthe defaultStringEncoding
グローバルプロパティの設定に従って解釈されます。デフォルトでは、SenseTalkはUTF-8、Unicode文字をエンコードする一般的な8ビットシステムを使用します。テキストとしてではなく、バイナリデータとしてファイルを読み書きするには、as data
を指定します:
The StrictFiles
グローバルプロパティを使用して、コンテナとして存在しないファイルを読み取る際の動作を制御できます。デフォルトはfalseで、存在しないファイルは空として扱われます。ファイルが存在しない場合に例外をスローしたい場合、このプロパティをtrueに設定します。
ファイル操作のコマンドと関数
ファイル入出力コマンド(open file
、close file
、read from file
、seek in file
、write to file
)は、システム上のテキストファイルやバイナリファイルを作成しアクセスするためのものです。それらを使用して、ファイルシステムに格納されているデータを読み書きします。
これらのコマンドを使用するだけでなく、スクリプト内でコンテナとして直接ファイルにアクセスすることもできます。上記で説明したように、ファイルをコンテナとしてアクセスすることは、その内容を読み取るか操作する最も単純な方法を提供しますが、同じファイルに対して複数の操作を行う場合、ここで説明するコマンドよりも制御力が少なく、効率が少し落ちます。
Open File
コマンド
パラメーター: 開くか作成するファイルの名前。
動作: ファイルを開くまたは作成して、読み取り、書き込み、または両方を行います。open file
コマンドは、read
または write
コマンドを使ってファイルから何かを読み取るか、そのファイルに書き込む前に、ファイルを開くために使わなければなりません。ファイルを終了したら、close file
コマンドまたは close all
コマンドのいずれかを使用してファイルを閉じるべきです。
構文:
open file fileName { for [reading | writing | readwrite | appending | updating] }
fileName 式が既存のファイル名を生成しない場合、ファイルが作成されます。fileName が絶対パスでない場合、現在の作業フォルダに対する相対パスと見なされます。
例:
open file myFile
例:
Open file "/etc/passwd" for reading
例:
put "/Users/bkwins/Desktop/testfolder1/testfile.txt" into MyFileVar
open file MyFileVar for appending
ファイルを開く際には、必要に応じてファイルがどのようにアクセスされるかを指定することができます。読み取り専用、書き込み専用、または読み取りと書き込みの両方のためにファイルを開くことができます。アクセス方法を指定しない場合、デフォルトのモードはupdating
です。
以下の表に、各モードとその違いを示します:
モード | 読むことができる | 書き込む/作成する | 開始位置 | 既存のファイル |
---|---|---|---|---|
Reading | はい | いいえ | 開始地点 | 変更なし |
Writing | いいえ | はい | 開始地点 | 既存のファイルを置き換える |
ReadWrite | はい | はい | 開始地点 | 最大書き込み位置以降を切り捨てる |
Appending | はい | はい | ファイルの終端 | 切り捨てられることはなく、成長する可能性がある |
Updating | はい | はい | 開始地点 | 切り捨てられることはなく、成長する可能性がある |
reading
以外の全てのモードでは、存在しない場合はファイル(フルパスを含む)を作成します。
readwrite
、appending
、updating
の各モードは全て、ファイルを読み取りと書き込みの両方で開きます。ただし、readwrite
モードで開かれたファイルは、書き込まれたファイル内の最後(最大)の文字位置以降が切り捨てられます。ファイルに何も書き込まれていない場合、そのファイルは変更されません。
既存のファイルを開きたい場合(ただし、既に存在する場合に限ります)、次の例に示すようにfile fileName existsまたはthere is a file _fileName_を使用してファイルの存在を確認します。
例:
if there is a file myFile then
open file myFile for updating
else
answer "File " & myFile & " doesn't exist!"
exit all
end if
関連:
Close File
,Close All
: 開いているファイルを閉じるためにこれらのコマンドを使用します。OpenFiles
: この関数を使用して、現在開いているすべてのファイルのリストを取得します。
Close File
、Close All Files
コマンド
振る舞い: close file
コマンドは、open file
コマンドで開かれた開いているファイルを閉じます。 close all files
コマンドは、open file
コマンドで開かれたすべての開いているファイルを閉じます。スクリプトがファイルへのアクセスを終えたら close file
コマンドを使用するか、現在開いているすべてのファイルを閉じるために close all files
コマンドを使用します。
SenseTalkはスクリプトの実行が停止するたびに自動的にすべての開いているファイルを閉じますが、スクリプトがファイルの作業を終えたらファイルを閉じるようにすることが良い習慣です。
パラメータ: close file
では、閉じるファイルの名前が必要です。 close all files
コマンドはパラメータを取りません。
Syntax:
close file fileName
close all { files }
_fileName_は閉じるファイルの名前を与える表現であるべきです。ファイル名は、ファイルの完全なパス名であるか、または現在の作業フォルダ(the folder
によって返される)に対して相対的に指定されるべきです。
例:
close file "/etc/passwd"
例:
close all files -- open filesコマンドで開いたすべての開いているファイルを閉じます
close all files
コマンドは、現在開いているすべてのファイルを閉じます。これはどのスクリプトやハンドラがファイルを開いたかに関係なく行われます。この動作は、他のスクリプトがファイルを開いてまだ使用している場合、問題を引き起こす可能性があります。 openFiles()
関数を使用して、開いているすべてのファイルのリストを取得することができます。
The Umask:
ファイル内の現在位置
関数
動作: 開いているファイル内で次に読み書きされるバイトの位置を取得します。位置1はファイルの始まりを表します。
文法:
{the} {current} [position | location | offset] in file filename
例:
get the current position in file myFile
ファイルから読み取る
コマンド
動作: ファイルから読み取る
コマンドを使用してファイルからデータを読み取ります。なお、ファイルはまずファイルを開く
コマンドで開く必要があります。データは変数it
に読み込まれるか、指定された目的のコンテナに読み込まれます(into
節を使用)。
ファイルから読み取る
コマンドは、指定した数の文字、単語、アイテム、行、またはバイトを読み取ることができます。指定した区切り文字が見つかるまで読み取ることもできます。また、いくつかの異なるタイプの数値のリストを読み取ることもできます。読み取りは現在の位置から始まります。または、at
節を使用して開始位置を指定します。
データがこれ以上読み取り可能でないとき、目的のコンテナは空になります。要求されたデータが読み取られない場合、result
関数には理由(time out
や、ファイルの終わりに到達した場合はeof
など)が格納されます。
パラメーター: 以前にファイルを開く
コマンドで開いたファイルの名前。ファイルは、読み取りを許可するモードで開かれている必要があります(つまり、書き込みのみが許可されているwriting
モードではありません)。
文法:
read Options
数量オプション: オプション。一度に一つだけ使用できます。
from file fileName
他のオプション: オプション。一度に複数使用できます。
until [ {the} eof | {the} end {of {the} file} | terminator ]
for quantity {dataType}
[a | an | quantity] dataType
{for} {a | an} http {message | request | response}
{for} {a | an} [xmlrpc | xml-rpc] {message | request | response}
ソースオプション: 必須。
at startPos
[ in | [timeout | time out] {after | in} ] timeoutDuration
into container
もし until terminator (または他のバリエーション)が指定されている場合、指定された文字または文字列の次の出現までの開始位置からすべての文字が読み取られます。このオプションは、ソースから1行ずつ読み取る (終了文字として return
を使用する)ため、または他の区切り文字 (たとえば tab
) が見つかるまで読み取るために便利です。終端記号は長さが1文字以上になることがあり、読み取った値の一部として返されます。until eof
または until end
を指定すると、ファイルの終わりまで読み取ります。
もし for quantity dataType が使われている場合、quantity によって指定された文字数または他のデータ要素がファイルから読み取られます。もし dataType がテキストチャンクタイプ (つまり、characters
, words
, items
, または lines
) であれば、要求された量が利用可能になるまでテキストが読み取られます。最終的な区切り文字 (もしあれば) は、読み取られたテキストには含まれません。もし dataType が指定されていない場合、bytes
が想定されます (この場合、for
の単語は必須です)。
at
startpos を使用して、ファイルから読み取る
コマンドが読み取りを開始するファイル内のバイト位置を指定します。もし startpos の値が負の数であれば、読み取りが始まるファイルの終端からのバイト数を指定します。startpos の値が指定されていない場合、最初に読み取られる文字またはバイトは、そのファイルで最も最近のread
、write
、またはseek
コマンドによって決定されるファイル内の現在の位置にあります。
もし into container が指定されていれば、読み取られたデータは指定されたコンテナに入れられます。into
オプションが指定されていない場合、データは特別なit
変数に読み込まれます。
テキストチャンクタイプの代わりに数値データタイプを指定した場合、読み込みによって it
または container に格納される値は、読み込まれたデータ値のリストとなります。以下の数値データタイプが使用できます:
データタイプ | 値 |
---|---|
int1 または 8-bit integer | 8ビット(または1バイト)の符号付き整数 |
uint1 または unsigned 8-bit integer | 8ビット(または1バイト)の符号なし整数 |
int2 または 16-bit integer または short integer | 16ビット(または2バイト)の符号付き整数 |
uint2 または unsigned 16-bit integer | 16ビット(または2バイト)の符号なし整数 |
int4 または 32-bit integer または integer | 32ビット(または4バイト)の符号付き整数 |
uint4 または unsigned 32-bit integer | 32ビット(または4バイト)の符号なし整数 |
int8 または 64-bit integer | 64ビット(または8バイト)の符号付き整数 |
uint8 または unsigned 64-bit integer | 64ビット(または8バイト)の符号なし整数 |
real4 または 32-bit real または float | 32ビット (単精度) 浮動小数点数 |
real8 または 64-bit real または double | 64ビット (倍精度) 浮動小数点数 |
例:
read from file myFile for 20 -- 次の20バイトを読み込む
例:
read from file myFile into myFileVar until return
-- 最初の行を読み込み、変数に格納する
例:
read 100 characters from file xyz into input -- 次の100文字を入力に読み込む
例:
read into inQueue 5 items from file dataFile at 100
-- 位置 100 (100番目のバイト) から始まり、5つのテキスト項目を読み込み、
-- それらを変数 inQueue に格納する
以下に、一度に1行ずつ読み取り、処理する全体のファイルを読み取る一つの方法を示す例を示します:
例:
open file "/tmp/abcd"
repeat forever
read from file "/tmp/abcd" until returnn -- 1行を読む
if it is empty then exit repeat -- ファイルの終わりに達した
put it -- or do other processing with 'it' here
end repeat
close file"/tmp/abcd"
関連項目:
Open File Command
: このコマンドを使用して指定したファイルを開きます。Write to File Command
: このコマンドを使用してテキストやデータを開いているファイルに書き込みます。Close File Command
とClose All Command
: これらのコマンドを使用して開いているファイルを閉じます。ソケットから読み込む、プロセスから読み込む、入力コマンドから読み込む
: これらの関連コマンドは、ファイル以外のソースからの読み込みを可能にします。
Seek in File
コマンド
振る舞い: 次の read
または write
コマンドが発生するファイル内の位置を設定します。ファイル内で read
または write
を実行する前に、seek
コマンドを使用してファイル内の現在の位置を設定します。read
と write
のコマンドはどちらも at startPos オプションを提供してその操作の開始位置を指定しますが、seek
コマンドは現在の位置だけでなくファイルの始めや終わりからの位置も指定できるため、追加の柔軟性を提供します。
パラメータ: open file
コマンドで以前に開かれたファイルの名前。
構文:
seek in file fileName [at | to] position { from | before | after {the} [start | beginning | current position | end] }
position はファイル内で探す場所を指定する数値表現です。from
オプションの一つを使用して探索の起点を指定しない場合、正の position はファイルの始めからのバイト数を示し、負の position はファイルの終わりからのバイト数を示します。数字や数値表現の代わりに、position は the end
も可能で、これは以下と同じ意味です。
from
オプションを含めると、位置がファイルの始めや終わり、または現在の位置に対して相対的であることを指定できます。before
や after
を含めると、検索する位置を指定できます。
例:
seek in file myFile to 10 from the current position
例:
seek in file "/Users/bkwins/Documents/newText" to the end
例:
seek in file myFile to 8 bytes before the current position
関連項目:
ファイルから読む
: 開いているファイルからテキストやデータを読み取るためにファイルから読み取ります。ファイルに書き込む
: このコマンドを使用して、開いているファイルにテキストやデータを書き込みます。
ファイルに書き込む
コマンド
振る舞い: データをファイルに書き込みます。write
コマンドを使用してデータをディスク上のファイルに保存します。そのデータは後であなたのスクリプト、または他のアプリケーション全体によって再度ファイルから読み込むことができます。
パラメータ: open file
コマンドで以前に開かれたファイルの名前。そのファイルは書き込みを許可するモード(つまり、読み取りのみを許可する reading
モードではない)で開かれていなければなりません。
構文:
write data {as dataType} to file fileName {at [startpos | end | eof]}
data は有効な SenseTalk 式であることができます。dataType が指定されていない場合、data 式の値は文字列として扱われ、指定されたファイルに書き出されます。
もし at startpos が指定された場合、ファイルへの書き込みはそのファイル内のバイト位置から始まります。startpos の値が負の場合、それはファイルの終わりから何バイト戻って書き込みが始まるかを指定します。at end
オプションまたは at eof
オプションを使用すると、SenseTalk にファイルの終わり、すなわち既にファイルに存在する他のテキストの後に data を書き込むように指示します。位置が指定されていない場合、data はファイル内の現在の位置から書き込みが始まります。この位置は、そのファイルの最新の read
、write
、または seek
コマンドによって決定されます。
もし as dataType が指定された場合、データは書き込む前にそのバイナリ形式に変換されます。この場合、data は数値のリストであることができ、すべてが同じデータタイプに変換されます。有効なデータタイプのリストについては、read from file
コマンドを参照してください。
例:
write line 1 of accounts & return to file myFile
例:
write highScore & tab to file "~/.gamescores" at eof
例:
write numberList as 16-bit integers to file bData
例:
put "/Users/bob/Desktop/TestRead" into MyFileVar // creates a variable with a path to a file
open file MyFileVar // opens the file
put "GIO NOW" into MyWrite // puts a text string into a variable
write return to file MyFileVar at eof // adds a return character to the end of the file to ensure that new writes begin on a new line
write MyWrite to file MyFileVar // writes the text from the variable into the file
close file MyFileVar // closes the file
ファイルの既にデータが存在する位置に書き込むと、既存のデータが上書きされます。既存のファイルの中間にテキストを挿入するには、そのポイントからファイルの終わりまでのすべてのテキストを読み取り、それをコンテナに保存する必要があります。その後、挿入するテキストを書き出し、保存されたテキストを続けて書き出すことができます。
既存のファイルが readwrite
モードまたは appending
モードで開かれると、ファイルへの書き込みは、ファイルで書き込まれる最高位置を超えてデータがファイルから落ちる原因となります。このファイルの切り捨てを避けるためには、ファイルを updating
モードで開く必要があります。これらのモードについての詳細は、open file
コマンドを参照してください。
ファイルへのアクセスが終了したら、close file
コマンドでファイルを閉じて、書き出されたすべてのデータが正しくディスクに保存されるようにする必要があります。
例:
Open File
: このコマンドを使用して指定されたファイルを開きます。Read From File
: このコマンドを使用して開かれたファイルからテキストまたはデータを読み込みます。Close File
,Close All
: これらのコマンドを使用して開いたファイルを閉じます。The DefaultStringEncoding
: このグローバルプロパティは、ファイルから読み取ったり、ファイルに書き込んだりする際にテキスト文字列がどのようにエンコードされるかを指定します。
OpenFiles
関数
動作: open file
コマンドの結果として現在開いているファイルのリストを返します。
パラメータ: なし。
Syntax:
the openFiles
openFiles()
例:
log the openFiles
例:
open file "/Users/bkwins/Documents/newText"
put openFiles() into myVar
log myVar
特定の開いているファイルだけにアクションを実行するために openFiles()
を使用することができます。例えば、以下の例では、関数から返される情報を使用して、名前が .dat で終わるすべての開いているファイルを閉じる方法を示しています。
例:
repeat with each item of the openFiles
if it ends with ".dat" then close file it
end repeat
関連項目:
Open File
: このコマンドを使用して指定されたファイルを開きます。Close File
,Close All
: これらのコマンドを使用して開いたファイルを閉じます。
ファイルシステムと連携するためのコマンドと関数
いくつかのコマンドと関数は、スクリプトが実行されているマシン(またはローカルにマウントされたファイルシステム)上のファイルシステムへのアクセスを提供し、スクリプトがファイルやフォルダを作成、移動、コピー、名前変更、削除することを可能にし、システム内のファイルとフォルダに関する情報を取得することができます。
Create File
, Create Folder
, Create Link
コマンド
動作: ファイルシステムに新しいファイルやフォルダ、または既存のファイルやフォルダへのシンボリックリンクを作成します。create folder
コマンドを使用してディスクに新しいフォルダを作成します。create file
コマンドを使用して空のファイルを作成します。create link
を使用して、独立したファイルのように見えるリンク(エイリアスやシンボリックリンクとも呼ばれます)を作成しますが、実際にはディスク上の別のファイルへの参照です。
存在しないファイルに対して open file
コマンドを使用するか、存在しないファイルに何かを put
コマンドを使用して入れることでもファイルを作成することができます。どちらの方法も、指定されたディレクトリ構造とともにファイルを作成します。
パラメータ: create file
および create folder
には、作成するファイルまたはフォルダの名前が必要です。create linkには、リンクの名前と、リンク先のファイルまたはフォルダの名前が必要です。
構文:
create {a} {new} [file | folder | directory] fileOrFolderName {with properties}
create {a} {new} link linkName to [file | folder | directory] fileOrFolderName
fileOrFolderName 式は、絶対パス名または現在のフォルダに対する相対パス名を生成する必要があります。作成されるファイル、フォルダ、またはリンクは既に存在していないものでなければなりません。親フォルダが存在しない場合は、それも作成されます。
with properties オプションを使用する場合、properties は、次のプロパティのいずれかに対する初期値を指定するプロパティリストでなければなりません:ownerName, groupName, permissions, creationDate, modificationDate, そしてファイルの場合:typeCode, creatorCode, fileExtensionHidden, appendOnly, もしくは locked。これらのプロパティを設定する方法については、Accessing File Properties を参照してください。
例:
create file "/tmp/myWorkArea/testData"
例:
create a new folder "/tmp/myWorkArea"
例:
create folder "/tmp/myWorkArea/subdir" with {groupName:"admin", permissions:"rwxrwxr-x"}
例:
create link "tasty" to file "juicy"
the throwExceptionResults
グローバルプロパティをfalseに設定すると、このコマンドが例外をスローするのを防ぎ、そのエラーが result() 関数を通じて利用可能になります。
Delete File
, Delete Folder
コマンド
振る舞い: ディスクからファイルまたはフォルダを永久に削除します。delete
コマンドを使用してファイルを破壊するか、フォルダとそのすべての内容を破壊します。このコマンドは恒久的で不可逆的ですので、注意して使用してください。
パラメータ: 削除するファイルまたはフォルダの名前。
構文:
delete [file | folder | directory] fileOrFolderName
fileOrFolderName 式は、既存のファイルまたはフォルダの名前を生成する必要があります。フォルダを削除すると、その中のすべてのファイルとフォルダも削除されます。
例:
delete file "testData27"
例:
delete folder "/tmp/myWorkArea"
the throwExceptionResults
グローバルプロパティをfalseに設定すると、このコマンドが例外をスローするのを防ぎ、そのエラーが result() 関数を通じて利用可能になります。
Rename File
, Rename Folder
コマンド
振る舞い: rename
コマンドを使用して、ファイルまたはフォルダの名前を変更します。
パラメータ: 名前を変更したいファイルの名前と、そのファイルの新しい名前。
構文:
rename [file | folder | directory] originalName as newName
originalName 式は、既存のファイルまたはフォルダの名前を生成する必要があります。newName が完全なパス名でない場合、それはソースファイルまたはフォルダが存在するフォルダに対する相対パスとみなされます。
例:
rename folder "/tmp/myWorkArea" as "oldWorkArea"
例:
rename file sourceFile as sourceFile && "backup"
the throwExceptionResults
グローバルプロパティをfalseに設定すると、このコマンドが例外をスローするのを防ぎ、そのエラーが result() 関数を通じて利用可能になります。
Copy File
, Copy Folder
コマンド
振る舞い: 既存のファイルまたはフォルダの複製コピーを作成します。単一のファイルまたはその内容全てを含むフォルダの完全なコピーを作成したいときはいつでも、copy
コマンドを使用します。
copy
コマンドには三つの形式があります: copy ... into ...
、copy ... as ...
、および copy ... to ...
。最初の形式である into
を使った場合、ソースファイルまたはフォルダの同名のコピーを別のディレクトリに作成します。そのディレクトリが存在しない場合、それは作成されます。
二つ目の形式の copy
は、コピーに別の名前を付けることができます。このコピーはソースと同じフォルダに、または別のフォルダに作成できます。最後の形式の copy
は、to
を使用しています。これは、目的地が既存のフォルダの場合は copy ... into ...
のように振る舞います。それ以外の場合は copy ... as ...
のように振る舞います。
パラメータ: コピーするファイルの名前が必要です。また、コピーの新しい名前または新しい宛先も必要です。
構文:
copy [file | folder | directory] sourceName [into | to] {folder | directory} destinationFolder
copy [file | folder | directory] sourceName [as | to] destinationName
_sourceName_式は、既存のファイルまたはフォルダの名前を生成しなければなりません。_sourceName_が絶対パスでない場合、それは現在の作業フォルダに対する相対パスと見なされます。_destinationFolder_または_destinationName_が絶対パスでない場合、それはソースファイルまたはフォルダの親ディレクトリに対する相対パスと見なされます。
例:
copy file results into folder resultsArchiveFolder
例:
copy file "/tmp/testFile" as "/tmp/testFileCopy"
例:
copy folder planFldr to "~/Documents"
the throwExceptionResults
グローバルプロパティをfalseに設定して、このコマンドが例外をスローするのを防ぎ、そのエラーをresult()関数を通じて利用可能にします。
Move File
, Move Folder
コマンド
動作: ファイルまたはフォルダをファイルシステム内の新しい場所に移動します。move ... into ...
コマンドを使用して、名前を変更せずにファイルまたはフォルダを別の親フォルダに移動します。move ... to ...
コマンド(copy ... to ...
コマンドに類似)は、目的地が既存のフォルダでない限り、移動するファイルまたはフォルダに新しい名前を割り当てます。目的地が既存のフォルダである場合、ソースファイルまたはフォルダは名前を変更せずに目的地のフォルダに移動します。
パラメータ: 移動するファイルまたはフォルダの名前と、目的地の名前が両方とも必要です。
構文:
move [file | folder | directory] sourceName [into | to] {folder | directory} destinationFolder
_sourceName_が絶対パスでない場合、それは現在の作業フォルダに対する相対パスと見なされます。_destinationFolder_が絶対パスでない場合、それはソースファイルまたはフォルダの親フォルダに対する相対パスと見なされます。_destinationFolder_が存在しない場合、それは作成されます。
例:
move file "/tmp/testFile" into folder "archives"
the throwExceptionResults
グローバルプロパティをfalseに設定して、このコマンドが例外をスローするのを防ぎ、そのエラーをresult()関数を通じて利用可能にします。
Files
関数
戻り値: 指定されたフォルダ(または指定されていない場合は現在の作業フォルダ)内の非フォルダエントリごとに1つのアイテムが含まれるリスト。返されたリスト内の各アイテムはfileDescriptionオブジェクトです(objectTypeがfileDescription
に設定されたプロパティリスト)。各fileDescriptionのasTextプロパティはファイルのローカル名に設定されているため、それを表示するとファイルの名前が表示されます。
パラメータ: files
関数がパラメータなしで(または空のパラメータで)呼び出されると、現在の作業フォルダ内のファイルのリストが返されます。パラメータが指定されている場合、それは既存のフォルダの名前でなければならず、そのフォルダ内のファイルのリストが関数から返されます。
構文:
the files {of folder}
files( {folder} )
動作: 現在の作業フォルダ、または指定したフォルダにあるすべてのファイルのリストを返します。files
関数を使用して、ファイルシステム内の指定したフォルダにどのファイルが存在するかを確認します。
例:
put files("/Users/bkwins/Desktop")
例:
put the files of "/Users/bkwins/Desktop"
the files
関数が返すリスト内のすべてのファイルを簡単に反復処理し、順番に各ファイルを処理することができます。次の例では、特定のファイルタイプのみをバックアップしたい場合の使用ケースを示しています。
例:
// バックアップフォルダにすべての".st"ファイルをバックアップする
repeat with each item of the files --作業フォルダ内のすべてのファイルを見る
if it ends with ".st" then copy file it into backupFolder
else put "Not backed up: " & it & " of size " & it.NSFileSize
end repeat
各fileDescriptionオブジェクトには、他にも多くの情報が含まれています。特に、「long name」プロパティには、ファイルのフルパス名が含まれています。その他のプロパティには、ファイルが配置されている親フォルダ、ファイルサイズ、オーナー、パーミッションなどの情報が含まれています。keys()関数を使用する(または表示する前にオブジェクトのasTextプロパティを削除する)と、利用可能な情報の全体像が分かります。
copy file
やrename
といったSenseTalkのコマンドや、ファイルと共に働くdiskSpace()
関数などは、ファイル名の代わりに使われるfileDescriptionオブジェクトを認識し、実際のファイルを識別するためにlong nameを使用します。このように、fileDescriptionオブジェクトは、変数に格納されたり、パラメータとして渡されたり、などの方法でファイル識別子として機能します。
関連項目:
Folders
関数
動作: 現在の作業フォルダ、または指定したフォルダ内のすべてのサブフォルダのリストを返します。folders
関数を使用して、ファイルシステム内の指定したフォルダ内にどのフォルダが存在するかを確認します。
パラメータ: folders
関数がパラメータなしで呼び出されると、現在の作業フォルダ内のフォルダのリストが返されます。パラメータが指定されている場合、それは既存のフォルダの名前でなければならず、そのフォルダ内のサブフォルダのリストが関数によって返されます。
構文:
the folders {of parentFolder}
folders( {parentFolder} )
_parentFolder_式は、既存のフォルダの名前を出力しなければなりません。
戻り値: _parentFolder_内の各サブフォルダエントリに対応する1つの項目を含むリスト(_parentFolder_が指定されていない場合は、現在の作業フォルダ内)。
例:
log folders() // 現在の作業ディレクトリ内のすべてのフォルダをログに記録
例:
put the folders of "/Users/bkwins/Desktop/" into myFolderListVar
// デスクトップ上のフォルダのリストを変数に入れる
folders
関数が返すリスト内のすべてのフォルダを簡単に反復処理し、順番に各フォルダを処理することができます。たとえば、次の例のコードを使用して、フォルダの各サブフォルダ内のすべての個別ファイルを表示することができます。
例:
// 現在のフォルダの各サブフォルダ内のファイルを表示
repeat with each item of the folders
put "Folder " & it & return & the files of it
end repeat
返されるリストの各項目は、表示時にフォルダのローカル名を示すが、フォルダに関する他の多くの情報、例えばその変更日とパーミッション設定なども含むfileDescriptionオブジェクト(プロパティリスト)です。 fileDescriptionオブジェクトについての詳細は、上記の files
function、または fileDescription
functionを参照してください。
関連項目:
FilesAndFolders
関数
動作: 現在の作業フォルダまたは指定されたフォルダ内のすべてのファイルとサブフォルダのリストを返します。filesAndFolders
関数を使用して、ファイルシステム内の指定したフォルダ内に存在するファイルとフォルダを調べます。
パラメータ: filesAndFolders
関数がパラメータなしで呼び出された場合、現在の作業フォルダ内のファイルとフォルダのリストを返します。パラメータが与えられた場合、それは既存のフォルダの名前でなければならず、そのフォルダ内のファイルとサブフォルダのリストを返します。
構文:
the filesAndFolders {of parentFolder}
filesAndFolders( {parentFolder} )
_parentFolder_式は、既存のフォルダの名前を出力しなければなりません。
戻り値: _parentFolder_内(または、_parentFolder_が指定されていない場合は、現在の作業フォルダ内)のファイルとサブフォルダのエントリごとに1つの項目を含むリスト。
例:
log filesandfolders() // 現在の作業ディレクトリ内のすべてのファイルとフォルダをログに記録
例:
put the filesandfolders of "/Users/bkwins/Desktop/" into folderContents
// デスクトップ上のファイルとフォルダのリストを変数に入れる
関数が返すリストのすべての項目を簡単に反復処理し、順番に各ファイルまたはフォルダを処理することができます。次の例は、各項目を処理し、ファイルとフォルダを異なる方法で扱う方法を示しています。
例:
// 現在のフォルダとそのサブフォルダ内のファイルを表示する
repeat with each item of the filesAndFolders
if it is a folder then
put "Folder: " & it & " -- " & the files of it
else
put "File: " & it
end if
end repeat
返されるリストの各項目は、表示時にファイルまたはフォルダのローカル名を示すが、その項目に関する他の多くの情報、例えばその変更日とパーミッション設定なども含むfileDescriptionオブジェクト(プロパティリスト)です。 fileDescriptionオブジェクトについての詳細は、上記の files
function、または fileDescription functionを参照してください。
関連項目:
Zip File, Zip Folder
コマンド
動作: 既存のファイルまたはフォルダの圧縮アーカイブ(.zipファイル)を作成します。zip
コマンドは、単一のファイルのアーカイブコピーを作成したい場合、またはフォルダとそのすべての内容をアーカイブしたい場合に使用します。
zip
コマンドにはいくつかの形式があります。最もシンプルな「zip file filename」は、ソースファイルがあった同じフォルダに filename.zipという名前の圧縮ファイルを作成します。異なる出力ファイル名を指定するには、「as zipFilename」をコマンドに含めます。出力を別の場所に置くには、「into folderName」節を含めます。目的のフォルダが存在しない場合は、作成されます。
コマンドの最後に "with optionPropertyList" を含めることで、追加のオプションも指定することができます。可能なオプションには以下のようなものがあります:
- password: パスワードの文字列です。含まれている場合、結果のzipアーカイブは暗号化され、パスワードを再度供給しなければ解凍できません。
- encryptKeyLength: 128、192、または256(デフォルトは128)を指定しなければなりません。暗号化に使用するキーの長さです。
- compressionLevel: 圧縮の量を指定する整数(デフォルトは6)。0(圧縮しない)から9(最大圧縮)までの範囲です。
- includeSubfolders: ブール値(デフォルトはTrue/Yes)。アーカイブにサブフォルダを含めるかどうか、またはフォルダのトップレベルのファイルのみを含めるかどうかです。
- filesToInclude: アーカイブに含めるフォルダ内のどのファイルを指定するワイルドカードパターンの文字列です(
"*"
= すべてのファイル(デフォルト)、"*.txt"
= すべてのテキストファイルなど)。FilesToInclude
は、含めるワイルドカード文字列のリストとしても指定できます(例:filesToInclude:["*.txt", "*.script"]
)。
パラメーター: 圧縮するファイルまたはフォルダの名前が必要です。他のパラメーターは任意です。
構文:
zip file sourceFileName {[as | to] zippedFileName} {[into | in] [folder | directory] destinationFolder} {with optionPropertyList}zip [folder | directory] sourceFolderName {[as | to] zippedFileName} {[into | in] [folder | directory] destinationFolder} {with optionPropertyList}
sourceFileName または sourceFolderName の表現は、既存のファイルまたはフォルダの名前を出力する必要があります。それが絶対パスでない場合、現在の作業フォルダに対する相対パスと見なされます。 destinationFolder または zippedFileName が絶対パスでない場合、ソースファイルまたはフォルダの親ディレクトリに対する相対パスと見なされます。
Unzip File
コマンド
動作: .zipアーカイブファイルの内容を解凍し、抽出します。ファイルを解凍し、その内容を取得したい場合はいつでも unzip
コマンドを使用します。
unzip
コマンドにはいくつかの形式があります。最も簡単な形式は "unzip file filename" で、ソース.zipファイルがあった同じフォルダに内容を抽出します。異なる出力ファイル名を指定するために(.zipアーカイブの単一ファイルの場合)は、コマンドに "as unzippedFileName" を含めます。出力を異なる場所に置くには、"into destinationFolder" 節を含めます。目的地のフォルダが存在しない場合、作成されます。
パラメータ: .zipファイルの名前が必要です。追加のオプションは、コマンドの最後に "with optionPropertyList" を含めることで指定できます。可能なオプションには以下のものがあります:
- password: 暗号化されたアーカイブを解凍するときに使用するパスワードの文字列。
- overwriteExistingFiles: ブール値(デフォルトはTrue/Yes)。抽出されたファイルが同じ名前の既存のファイルを置き換えるべきかどうか。
- newerFilesOnly: ブール値(デフォルトはFalse/No)。trueに設定されている場合、既存のファイルはアーカイブから抽出されたファイルによってのみ置き換えられます。
構文:
unzip file zipFileName {[as | to] unzippedFileName} {[into | in] [folder | directory] destinationFolder} {with optionPropertyList}
zipFileName 式は既存の .zip ファイルの名前を出力しなければなりません。それが絶対パスでない場合、現在の作業フォルダに対する相対パスとみなされます。destinationFolder または unzippedFileName が絶対パスでない場合、ソース.zip ファイルの親ディレクトリに対する相対パスとみなされます。
AvailableStringEncodings
関数
動作: すべての利用可能な文字列エンコーディング形式の名前のリストを返します。場合によっては同じエンコーディングに複数の名前があるかもしれません。availableStringEncodings
関数を使って、the defaultStringEncoding
グローバルプロパティを設定するときに利用可能なエンコーディングの名前を確認します。
構文:
the availableStringEncodings
availableStringEncodings()
例:
put the availableStringEncodings
CSVフォーマットで作業するための関数
SenseTalkスクリプト作成中にCSVデータの一部をフォーマットする必要があるかもしれません。SenseTalkには、CSVフォーマットを補助するための CSVFormat
関数と CSVValue
関数が含まれています。
CSVFormat
関数
動作: この関数は値(リストのリストまたはプロパティリストのリスト)を受け取り、そのリストのCSV形式のテキスト表現を返します。
パラメータ: CSVFormat
関数は以下のパラメータを使用します:
- delimiter:
delimiter
パラメータ値は、各行のフィールド間で使用する文字を表します。デフォルト値はカンマです。 - columnNames: 列の名前のリスト。
構文:
CSVFormat( [listOfLists | listOfPropertyLists] {, options} )
{the} CSVFormat of [listOfLists | listOfPropertyLists]
例:
put ["id","LName","FName","Address","City","State","Zip"] into colNames // Adds header names to a list
put CSVFormat([colNames,customer1,customer2,customer3])
// Outputs the header names that were added to the colNames list and the current values contained in customer1, customer2, and customer3, all in CSV format:
// id,LName,FName,Address,City,State,Zip
// 1,Smith,Joe,123 Happy Place,Boulder,CO,80303
// 2,Jones,Mary,456 Happy Place,Boulder,CO,80303
// 3,Brown,James,456 Happy Place,Boulder,CO,80303
CSVValue
関数
動作: この関数はCSV形式のテキストを受け取り、それをプロパティリストのリストまたはリストのリストに変換します。
パラメータ: CSVValue
関数は以下のパラメータを使用します:
- delimiter:
delimiter
パラメータ値は、各行のフィールド間で使用する文字を表します。デフォルト値はカンマです。 - asLists:
asLists
パラメータ値をYes
に設定すると、CSVValue
関数はリストのリストを作成します。デフォルト値はNo
で、これによりプロパティリストのリストが作成されます。 - columnNames:
columnNames
パラメータは列の名前のリストを表します。ヘッダ行がない場合にこのパラメータを指定します。asLists
パラメータが設定されている場合、CSVValue
関数はこのパラメータを無視します。 - trimValues: この値を
Yes
に設定すると、各値の前後のスペースをトリムします。デフォルト値はNo
です。 - ignoreComments: この値を
Yes
に設定すると、#
文字で始まるコメントを認識して無視します。デフォルト値はNo
です。 - allowEscapes: この値を
Yes
に設定すると、バックスラッシュを含む値がバックスラッシュに続く文字をエスケープすることができます。デフォルト値はNo
です。
構文:
CSVValue( CSVstringToEvaluate {, options} )
{the} CSVValue of CSVstringToEvaluate
例:
put CSVValue of file ResourcePath("TestCustomerList_CSV.csv") into Customers
// TestCustomerList_CSV.csv ファイルから顧客リストを読み込み、それらを Customers リストに格納します
repeat for each item of Customers
put it // Customers リストに含まれる各項目を表示します
end repeat
// Customers リストから以下の項目を出力します(これらの内容はこの例のために想定される TestCustomerList_CSV.csv ファイルの内容です):
// (City:"New York", @"Company Name":"ABC", Country:"United States", @"Customer ID":"2", @"Postal Code":"12345", State:"New York")
// (City:"Seattle", @"Company Name":"XYZ", Country:"United States", @"Customer ID":"3", @"Postal Code":"12345", State:"Washington")
関連:
関連するグローバルプロパティ
SenseTalkには、ファイルやファイルシステムオブジェクトの操作に影響を与えるいくつかのグローバルプロパティが含まれています。
ランタイムでのファイルの使用に対するより厳格な制御を提供するために、the strictFiles
グローバルプロパティを使用して、存在しないファイルを読み込もうとした場合に空の値(デフォルト)を返すか、例外を返すかを決定できます。
the defaultStringEncoding
を使用して、ファイル、ソケット、またはURLから読み込まれたり、それらに書き込まれたりするときにテキスト文字列がどのようにエンコードされるかを指定できます。デフォルトの方法はUTF8ですが、他の多くのエンコード方法が使用できます。
the umask
グローバルプロパティを使用して、SenseTalkによって直接または間接的に作成された任意のファイルやフォルダのアクセス許可を制御できます。