ファイルやフォルダとのやり取り
注:ファイルとファイルシステムオブジェクトを操作するためのSenseTalkコマンドと関数は、テスト対象システム(SUT)上ではなく、ローカルマシン上で機能します。
ファイルやファイルシステムの情報にアクセスしたい場合は、ファイルやフォルダの参照をご覧ください。
ファイルにコンテナとしてアクセスする
ファイルの中身を扱う手法として最も簡単なのは、SenseTalkコンテナとしてファイルに直接アクセスするやり方です。この手法を使うと、1つのコマンドでファイル全体を読み取ることができます。
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"
このコマンドでは、ファイルの現在の中身を読み取り、1行目にある2番目のアイテムに1を加え、変更済みのその値をファイルに再び格納しています。
次の例では、この手法を使ってファイル全体を1行ずつ読み取っています。
put file "/Users/bob/Desktop/TestRead" into MyFileVar
repeat the number of lines of MyFileVar times
put line repeatindex() of MyFileVar into output
log output
end repeat
この例では、各行の読み取り後にログだけを行っていますが、その代わりにコードを追加し、各行の中身(ここでは変数outputに格納)を使ってさらなるアクションを実行することも可能です。
コマンドでファイルへの書き込みを行おうとして、何らかの理由(ファイルに書き込むための権限が不十分など)でそれが失敗した場合、the resultはエラーメッセージに設定されます。ファイルをコンテナとして読み取るときも、そのファイルが存在しない、またはアクセスできない場合には、the resultの値がエラーメッセージに設定されます。この場合、file式の値は空として扱われます。
ファイルをコンテナとして扱うやり方は、簡単な上、多くの状況でうまく機能します。しかし時に、スクリプトでファイル内のかなりの量の読み書きを行う必要がある場合、これが一番効率的な手法とは言えないかもしれません。こういったケースでは、下のファイルを扱うためのコマンドと関数のところで説明するコマンドを使う方が望ましい場合があります。
ファイルの振る舞いを設定する
コンテナとしてファイルにアクセスする際、読み書きの両方において、テキストの解釈はthe defaultStringEncodingグローバルプロパティの設定に従います。SenseTalkがデフォルトで使用するのは、UTF-8(Unicode文字符号化用の一般的な8ビットシステム)です。テキストではなくバイナリデータとしてファイルを読み書きするときは、as dataを指定します。
put file "/tmp/datafile" as data into myData
put contents as data into file "/tmp/binaryFile"
SenseTalkコマンドで新規ファイルを作成する場合、ファイルのアクセスパーミッションも、ディレクトリ構造内で作成されたフォルダへのアクセスと同じように制御することができます。こうしたプロパティの読み取りや設定については、the umaskグローバルプロパティで全詳細をご確認いただけます。
存在しないファイルをコンテナとして読み取るときの振る舞いは、the strictFilesグローバルプロパティで制御可能です。デフォルトはfalseで、存在しないファイルを空として扱います。ファイルが存在しない場合に例外を投げたいのであれば、このプロパティをtrueに設定します。
ファイルを扱うためのコマンドと関数
ファイル入出力コマンド(open file、close file、read from file、seek in fileおよびwrite to file)は、システム上のテキストファイルまたはバイナリファイルの作成およびアクセス用のコマンドで、 ファイルシステムに格納されているデータを読み書きする場合に使用します。
こちらのコマンドを使用する他に、上記で説明したように、スクリプト内でコンテナとしてファイルに直接アクセスすることも可能です。コンテナとしてファイルにアクセスするやり方はファイルの中身を読み取ったり操作したりする方法として最も簡単なものですが、操作性や同一ファイルへの複数演算実行時における効率の点ではここに説明するコマンドの方が優れています。
Open Fileコマンド
挙動:読み取り、書き込み、またはその両方を行うために、ファイルを開いたり、作成したりします。readまたはwriteコマンドでファイルを読み書きするには、まずopen fileコマンドを使ってそのファイルを開かなければなりません。ファイルでの作業を終えたら、 close fileまたはclose allコマンドのどちらかを使ってファイルを閉じてください。
パラメータ:開くファイルまたは作成するファイルの名前。
構文:
open file ファイル名{ for [reading | writing | readwrite | appending | updating] }
ファイル名式が既存のファイル名を与えるものでない場合、ファイルの作成が行われます。また、ファイル名が絶対パスではない場合、現在の作業フォルダに対する相対パスと見なされます。
例:
open file myFile
例:
Open file "/etc/passwd" for reading
例:
put "/Users/bkwins/Desktop/testfolder1/testfile.txt" into MyFileVar
open file MyFileVar for appending
モードの一覧と、その違いを下の表にまとめました。
モード |
読み取り |
書き込み/作成 |
開始地点 |
既存のファイル |
Reading |
可 |
不可 |
先頭 |
変更なし |
Writing |
不可 |
可 |
先頭 |
既存のファイルを置き換え |
ReadWrite |
可 |
可 |
先頭 |
最大書き込み以降は切り詰め |
Appending |
可 |
可 |
ファイルの末尾 |
切り詰めなし、拡張可能 |
Updating |
可 |
可 |
先頭 |
切り詰めなし、拡張可能 |
reading以外のモードはすべて、当該ファイルがまだ存在していない場合に、ファイル(フルパスを含む)の作成を行います。
readwrite、appendingおよびupdatingモードはどれも、読み書きの両方が可能な形でファイルを開きます。ただし、readwriteモードで開かれたファイルは、書き込まれるファイル内の最後尾(最大)文字位置より後ろは切り詰められます。ファイルに何も書き込まれなければ、変更されないままとなります。
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コマンドで開かれたファイルを1つ閉じ、 close all filesコマンドは、open fileコマンドで開かれたファイルをすべて閉じます。スクリプトで1ファイルへのアクセスを終えたときにはclose fileコマンドを使用し、現在開いているすべてのファイルを閉じるときにはclose all filesコマンドを使用します。
パラメータ:close fileコマンドの場合は、閉じるファイルの名前が必要です。close all filesコマンドはパラメータを取りません。
構文:
close file ファイル名
close all { files }
ファイル名には、閉じるファイルの名前を与える式を入れます。ファイル名は、ファイルのフルパス名か、現在の作業フォルダ(the folderで返される値)に対する相対名のどちらかとします。
例:
close file "/etc/passwd"
例:
close all files -- open filesコマンドで開かれているファイルをすべて閉じます
関連:
- open file:指定したファイルを開くときは、こちらのコマンドを使います。
- openFiles():現在開いている全ファイルのリストを取得するときは、こちらの関数を使います。
Current Position in File関数
挙動:開いているファイル内の、これから読み書きされる次のバイト位置を取得します。Position 1はファイルの先頭を表します。
構文:
例:
get the current position in file myFile
Read from Fileコマンド
挙動:ファイルからデータを読み取るときは、read from fileコマンドを使います。まずopen fileコマンドでファイルを開いておく必要があることに注意してください。データの読み込み先となるのは、変数itか、格納先コンテナ(into節を使って指定した場合)です。
read from fileコマンドでは、指定した数の文字、単語、アイテムまたは行を読み取ったり、指定した区切り文字の検出箇所までを読み取ったり、数種類の数値のうちの1種類をリストの形で読み取ったりすることができます。読み取りの開始地点となるのは、現在の位置か、at節を使って指定した開始位置です。
読み取るデータがそれ以上なくなったら、格納先コンテナが空になります。読み取られたデータが要求よりも少ない場合は必ず、result関数にその理由を示す値が格納されます(time outや、ファイルの末尾に到達した場合のeofなど)。
パラメータ:open fileコマンドで既に開かれているファイルの名前。ファイルは、読み取り可のモード(書き込み専用のwritingモード以外)で開かれていなければなりません。
構文:
read from file ファイル名 { at 開始位置} { into コンテナ} { until [終端子 | eof | end] } { {for} 数量 {データタイプ} }
readコマンドの構文には柔軟性があり、さまざまなオプションを都合の良い順番で指定することができます。
at 開始位置は、read from fileコマンドで読み取りを開始する、ファイル内の文字位置を指定するときに使います。開始位置の値を負の数値にすると、読み取り開始位置としてファイル末尾から遡った文字数を指定することになります。at 開始位置の値を指定しない場合、ファイル内の現在位置(そのファイルにおける直近のread、writeまたはseekコマンドによって決定される位置)にある文字が、読み取られる最初の文字となります。
into コンテナを指定すると、読み取られたデータがその指定のコンテナに格納されます。intoオプションを指定しない場合は、特別なit変数にデータが読み込まれます。
until 終端子を指定すると、開始位置から指定文字または文字列の次の出現箇所までの全文字が読み取られます。このオプションは、ソースから一度に1行ずつ読み取る際(returnを終端文字として使用)や、その他の区切り文字(tabなど)の検出箇所までを読み取る際に便利です。終端子は2文字以上でも構いません。また、終端子も読み取られた値の一部として返されます。until eofまたはuntil endを指定すると、ファイルの末尾までを読み取ります。
for 数量 データタイプを使用した場合、数量で指定した分の文字数またはその他のデータ要素数がファイルから読み取られます。データタイプがテキストチャンクタイプ(characters、words、itemsまたはlines)の場合、その要求分の数量が得られるまでテキストが読み取られます。最後の区切り文字(存在する場合)は、読み取られるテキストには含まれません。データタイプを与えない場合は、charactersと仮定されます(この場合、forという語を入れる必要があります)。
テキストチャンクタイプの代わりに数値のデータタイプを指定した場合、読み取りによってitまたはコンテナに格納される値は、読み取られたデータ値のリストになります。使用できる数値のデータタイプは次のとおりです。
データタイプ |
値 |
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 into inQueue 5 items from file dataFile at 100 -- 位置100(100番目の文字)から5アイテムを読み取って変数inQueueに格納します
open file "/tmp/abcd"
repeat forever
read from file "/tmp/abcd" until return -- 1行読み取ります
if it is empty then exit repeat -- ファイルの末尾に到達しました
put it -- もしくは、ここで「it」を使った他の処理を行います
end repeat
close file "/tmp/abcd"
関連:
- open file:指定したファイルを開くときは、こちらのコマンドを使います。
- write to file:開いているファイルにテキストやデータを書き込むときは、こちらのコマンドを使います。
- close file、close all:開いているファイルを閉じるときは、こちらのコマンドを使います。
Seek in Fileコマンド
挙動:次のreadまたはwriteコマンドが行われる、ファイル内の位置を設定します。seekコマンドを使うと、ファイル内でreadまたはwriteコマンドを実行する前に、そのファイル内での現在位置を設定することができます。readコマンドもwriteコマンドも、その操作の開始位置を指定するat 開始位置オプションを備えていますが、seekコマンドの場合、ファイル内の位置をファイルの先頭または末尾からだけでなく、現在の場所との相対関係で指定することもできるため、より柔軟性があります。
パラメータ:open fileコマンドで既に開かれているファイルの名前。
構文:
seek in file ファイル名 [at | to] 位置 { from | before | after {the} [start | beginning | current position | end] }
位置には、ファイル内でシーク先の場所を指定する数値式を入れます。fromオプションのどれかを使ってシークの起点を指定しない場合、正の位置はファイル先頭からの文字数を、負の位置はファイル末尾から遡った文字数を指すことになります。位置には、数値または数値式の代わりにthe endを入れることもできます。これは、下記と同じ意味になります。
seek in file ... to 0 from 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
関連:
- read from file:開いているファイルからテキストやデータを読み取るときは、read from fileを使います。
- write to file:開いているファイルにテキストやデータを書き込むときは、こちらのコマンドを使います。
Write to Fileコマンド
挙動:ファイル内にデータを書き込みます。ディスク上のファイルにデータを格納するときは、このwriteコマンドを使用します。格納したデータは、後ほどスクリプトでファイルから再び読み取ることもできますし、全く別のアプリケーションで読み取ることもできます。
パラメータ:open fileコマンドで既に開かれているファイルの名前。ファイルは、書き込み可のモード(読み取り専用のreadingモード以外)で開かれていなければなりません。
構文:
write データ {as データタイプ} to file ファイル名 {at [開始位置 | end | eof]}
データには、有効な任意のSenseTalk式を入れることができます。データタイプを指定しない場合、データ式の値は、文字列として扱われ、指定のファイルに書き出されます。
at 開始位置を指定した場合、ファイル内のその文字位置で、ファイルへの書き込みが開始されます。開始位置の値を負にすると、書き込み開始位置としてファイル末尾から遡った文字数が指定されます。at endまたはat eofオプションを使うと、ファイル内の他の既存テキストに続けて、ファイルの末尾にデータを書き込むようSenseTalkに指示します。場所を指定しない場合、そのファイル内の直近のread、writeまたはseek コマンドによって決定されるファイル内の現在位置からデータの書き込みが開始されます。
as データタイプを指定した場合、書き込み前にデータがバイナリ形式に変換されます。この場合は、データを数値リストとすることができ、これらはすべて同じデータタイプに変換されます。有効なデータタイプの一覧は、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 // ファイルパスを備えた変数を作成します
open file MyFileVar // そのファイルを開きます
put "GIO NOW" into MyWrite // テキスト文字列を変数に格納します
write return to file MyFileVar at eof // ファイル末尾にreturn文字を追加して、新しい行から新たな書き込みを始めるようにします
write MyWrite to file MyFileVar // 変数からのテキストをファイルに書き込みます
close file MyFileVar // ファイルを閉じます
関連:
- open file:指定したファイルを開くときは、こちらのコマンドを使います。
- read from file:開いているファイルからテキストやデータを読み取るときは、read from fileを使います。
- close file、close all:開いているファイルを閉じるときは、こちらのコマンドを使います。
- the defaultStringEncoding:ファイルの読み書き時におけるテキスト文字列の符号化方法を指定するグローバルプロパティです。
OpenFiles関数
挙動:open fileコマンドの結果として現在開かれているファイルのリストを返します。
パラメータ:なし。
構文:
the openFiles
openFiles()
例:
log the openFiles
例:
open file "/Users/bkwins/Documents/newText"
put openFiles() into myVar
log myVar
例:
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で作成するのは、独立したファイルのように見えて、実際にはディスク上の別ファイルを参照するリンク(エイリアスまたはシンボリックリンクとも呼ばれる)です。
パラメータ:create fileおよびcreate folderについては、作成したいファイルまたはフォルダの名前が必要です。create linkについては、リンクの名前と、リンク先のファイルまたはフォルダの名前が必要です。
構文:
create {a} {new} [file | folder | directory] ファイルまたはフォルダ名 {with プロパティ}
create {a} {new} link リンク名 to [file | folder | directory] ファイルまたはフォルダ名
ファイルまたはフォルダ名式は、絶対パス名または現在のフォルダに対する相対パス名のいずれかを与えるものでなければなりません。作成されるファイル、フォルダまたはリンクは、既に存在するものであってはなりません。その親フォルダが存在しない場合は、親フォルダも作成されます。
with プロパティオプションを使用する場合、プロパティのところに入れるのは、ownerName、groupName、permissions、creationDate、modificationDateプロパティ、およびファイル用のtypeCode、creatorCode、fileExtensionHidden、appendOnly、lockedプロパティのいずれかの初期値を指定するプロパティリストとします。これらのプロパティ設定の詳細については、ファイルのプロパティにアクセスするをご覧ください。
例:
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"
Delete File、Delete Folderコマンド
挙動:ディスクからファイルまたはフォルダを完全に削除します。deleteコマンドは、ファイルの破棄や、中身をすべてひっくるめたフォルダの破棄に使用します。このコマンドは永久的で、元に戻すことはできません。注意してお使いください。
パラメータ:削除するファイルまたはフォルダの名前。
構文:
delete [file | folder | directory] ファイルまたはフォルダ名
ファイルまたはフォルダ名式は、既存のファイルまたはフォルダの名前を与えるものでなければなりません。フォルダを削除すると、そのフォルダに含まれるすべてのファイルとフォルダも削除されます。
例:
delete file "testData27"
例:
delete folder "/tmp/myWorkArea"
Rename File、Rename Folderコマンド
挙動:renameコマンドは、ファイルまたはフォルダの名前を変更するときに使用します。
パラメータ:名前変更対象のファイル名と新しいファイル名の両方が必要です。
構文:
rename [file | folder | directory] 元の名前 as 新しい名前
元の名前式は、既存のファイルまたはフォルダの名前を与えるものでなければなりません。新しい名前がフルパス名ではない場合、元のファイルまたはフォルダが位置しているフォルダに対しての相対パス名と見なされます。
例:
rename folder "/tmp/myWorkArea" as "oldWorkArea"
例:
rename file sourceFile as sourceFile && "backup"
Copy File、Copy Folderコマンド
挙動:既存のファイルまたはフォルダの重複コピーを作成します。copyコマンドは、ファイル単体または中身をすべてひっくるめたフォルダの完全なコピーを作成したいときに使用します。
copyコマンドには、copy ... into ...、copy ... as ...およびcopy ... to ...の3つの形態があります。前置詞intoを使用する1つ目の形態は、元のファイルまたはフォルダと同じ名前で、別のコピー先フォルダにコピーを作成します。コピー先フォルダが存在しない場合は、そのフォルダが作成されます。
前置詞asを使用する2つ目のcopy形態では、コピーに別の名前を割り当てることができます。コピーは、コピー元と同じフォルダに作成することも、別のフォルダに作成することもできます。前置詞toを使用する最後のcopy形態は、コピー先が既存フォルダの場合はcopy ... into ...と同じように振る舞い、そうでない場合はcopy ... as ...のように振る舞います。
パラメータ:コピーするファイルの名前と、 コピー先の新しい名前または新しいコピー先のいずれかが必要です。
構文:
copy [file | folder | directory] コピー元の名前 [into | to] {folder | directory} コピー先のフォルダ
copy [file | folder | directory] コピー元の名前 [as | to] コピー先の名前
コピー元の名前式は、既存のファイルまたはフォルダの名前を与えるものでなければなりません。コピー元の名前が絶対パスではない場合、現在の作業フォルダに対する相対パスと見なされます。コピー先のフォルダまたはコピー先の名前が絶対パスでない場合は、元のファイルまたはフォルダの親ディレクトリに対する相対パスと見なされます。
例:
copy file results into folder resultsArchiveFolder
例:
copy file "/tmp/testFile" as "/tmp/testFileCopy"
例:
copy folder planFldr to "~/Documents"
ヒント:コマンドが失敗した場合、the result関数は、エラーを示す空以外の値を返すよう設定されます。
Move File、Move Folderコマンド
挙動:ファイルまたはフォルダをファイルシステム内の新しい場所に移動します。move ... into ...コマンドは、ファイルまたはフォルダを名前はそのままに別の親フォルダへと移動させるときに使用します。move ... to ...コマンド(copy ... to ...コマンドに類似)は、移動するファイルまたはフォルダに新しい名前を割り当てます。ただし、移動先が既存フォルダの場合は、元のファイルまたはフォルダの名前は変わることなくその移動先フォルダに移動します。
パラメータ: 移動するファイルまたはフォルダの名前と移動先の名前の両方が必要です。
構文:
move [file | folder | directory] 移動元の名前 [into | to] {folder | directory} 移動先のフォルダ
移動元の名前が絶対パスではない場合、現在の作業フォルダに対する相対パスと見なされます。移動先のフォルダが絶対パスでない場合は、元のファイルまたはフォルダの親フォルダに対する相対パスと見なされます。移動先のフォルダが存在しない場合は、そのフォルダが作成されます。
例:
move file "/tmp/testFile" into folder "archives"
Files関数
挙動:現在の作業フォルダまたは指定されたフォルダにある全ファイルのリストを返します。files関数は、ファイルシステムの指定フォルダ内にどのようなファイルがあるか調べるときに使用します。
パラメータ:パラメータなし(または空のパラメータ)でfiles関数を呼び出すと、現在の作業フォルダにあるファイルのリストが返されます。パラメータ(既存フォルダの名前)を与えると、そのフォルダにあるファイルのリストが返されます。
構文:
the files {of フォルダ}
files(フォルダ)
戻り値:指定されたフォルダ(フォルダが指定されていない場合は現在の作業フォルダ)内にあるフォルダ以外の各項目につき、対応するアイテムを1つ含んだリスト。返されるリストの各アイテムは、fileDescriptionオブジェクト(objectTypeがfileDescriptionに設定されたプロパティリスト)です。それぞれのfileDescriptionのasTextプロパティにはファイルのローカル名が設定されるため、表示の際には単にファイル名だけが表示されます。
例:
put files("/Users/bkwins/Desktop")
例:
put the files of "/Users/bkwins/Desktop"
例:
// すべての「.st」ファイルをbackupFolderにバックアップします
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コマンド、diskSpace()関数などの、ファイルを扱うSenseTalkコマンドや関数は、ファイル名の代わりに使われるfileDescriptionオブジェクトを認識し、ロングネームを利用して実際のファイルを識別します。このように、fileDescriptionオブジェクトは、変数に格納したり、パラメータとして渡したりできるファイル識別子として機能することができます。
Folders関数
挙動:現在の作業フォルダまたは指定されたフォルダにある全サブフォルダのリストを返します。folders関数は、ファイルシステムの指定フォルダ内にどのようなフォルダがあるか調べるときに使用します。
パラメータ:パラメータなしでfolders関数を呼び出すと、現在の作業フォルダにあるフォルダのリストが返されます。パラメータ(既存フォルダの名前)を与えると、そのフォルダ内にあるサブフォルダのリストが返されます。
構文:
the folders {of 親フォルダ}
folders(親フォルダ)
親フォルダ式は、既存のフォルダの名前を与えるものでなければなりません。
戻り値:親フォルダ(親フォルダが指定されていない場合は現在の作業フォルダ)内にある各サブフォルダにつき、対応するアイテムを1つ含んだリスト。
例:
log folders() // 現在の作業ディレクトリ内にあるすべてのフォルダをログします
例:
put the folders of "/Users/bkwins/Desktop/" into myFolderListVar // デスクトップ上のフォルダのリストを変数に格納します
例:
// 現在のフォルダの各サブフォルダにあるファイルを表示します
repeat with each item of the folders
put "Folder " & it & return & the files of it
end repeat
技術トピック
返されるリストの各アイテムはfileDescriptionオブジェクト(プロパティリスト)で、表示の際にはフォルダのローカル名で表示されますが、他にもフォルダに関する多数の情報アイテム(変更日やパーミッション設定など)を含んでいます。fileDescriptionオブジェクトについての詳細は、files関数(上述)やfileDescription関数をご覧ください。
FilesAndFolders関数
挙動:現在の作業フォルダまたは指定されたフォルダにあるすべてのファイルおよびサブフォルダのリストを返します。filesAndFolders関数は、ファイルシステムの指定フォルダ内にどのようなファイルとフォルダがあるか調べるときに使用します。
パラメータ:パラメータなしでfilesAndFolders関数を呼び出すと、現在の作業フォルダにあるファイルとフォルダのリストが返されます。パラメータ(既存フォルダの名前)を与えると、そのフォルダ内にあるファイルとサブフォルダのリストが返されます。
構文:
the filesAndFolders {of 親フォルダ}
filesAndFolders(親フォルダ)
親フォルダ式は、既存のフォルダの名前を与えるものでなければなりません。
戻り値:親フォルダ(親フォルダが指定されていない場合は現在の作業フォルダ)内にある各ファイルと各サブフォルダにつき、対応するアイテムを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関数(上述)やfileDescription関数をご覧ください。
availableStringEncodings()関数
挙動:利用できるすべての文字列エンコーディング形式名のリストを返します。一部のケースでは、同一のエンコーディングに2つ以上の名前があることも考えられます。availableStringEncodings()関数は、the defaultStringEncodingグローバルプロパティの設定時に利用できるエンコーディングの名前を把握するときに使用します。
構文:
the availableStringEncodings
availableStringEncodings()
例:
put the availableStringEncodings
CSV形式を扱うための関数
場合によっては、SenseTalkスクリプトの記述中に、CSVデータのフォーマッティングが必要になるかもしれません。SenseTalkには、CSV形式についてサポートするCSVFormat()関数とCSVValue()関数が用意されています。
CSVFormat()関数
挙動:値(リストのリストまたはプロパティリストのリストのいずれか)を受け入れ、そのリストのテキスト表現をCSV形式で返します。
パラメータ:CSVFormat()関数で使用するパラメータ:
- delimiter:delimiterパラメータ値が表すのは、各行のフィールド同士の間に使われる文字で、 デフォルト値はコンマです。
- columnNames:カラム名のリストです。
構文:
例:
put {"id","LName","FName", "Address","City","State","Zip"} into colNames // ヘッダ名をリストに追加します
put CSVFormat((colNames, customer1, customer2, customer3))
// colNamesリストに追加されたヘッダ名と、customer1、customer2、customer3に格納されている現在の値をすべてCSV形式で出力します
// 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です。
構文:
例:
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が作成するあらゆるファイルまたはフォルダのアクセスパーミッションを直接的または間接的に制御することができます。
これらの各プロパティについては、ファイルおよびファイルシステムに関するローカルプロパティとグローバルプロパティのところで詳しく説明しています。