パスネームの扱い方
○ UNIX スタイルのパスネーム
RunRev はマルチプラットホーム対応であるため、ファイルのパスネームも独特の扱いをします。と言っても、基本となるのは UNIX で使われているスラッシュ(/)区切りのパスです。
絶対パス(フルパス)はスラッシュから始まります。こんな感じです。"/myHDD/docFolder/doc.txt"
相対パスは、スラッシュを付けずに書きます。例えばこんな感じです。 "docFolder/doc.txt"
「相対パス」とは、あるフォルダを基準とした、「部分的な」パス指定のことです。 RunRev では、後述する the defaultFolder の指すフォルダを基準にします。
どの OS 上であっても、例えば answer file や answer folder で得られるのは、UNIX 形式のパスネームです。そのため OS の違いは特に気にする必要はありません。ただし、パスネーム文字列を加工したりする場合は注意が必要です。
○ マック形式のパスと UNIX 形式のパス
HyperTalk でパスの一部を切り出す時は、item などを使って
set the itemDelimiter to ":"
put last item of pathName into filName
set the itemDelimiter to ","
のような処理をしていました。 RunRev 上ではパスデリミタが "/" ですから、同じ処理をするのに
set the itemDel to "/"
put last item of pathName into filName
とする必要があります。ちなみに the itemDel はローカルプロパティ(ハンドラ内のみ有効)なので、同じハンドラ内で item を使っていない限り、わざわざ "," に戻す必要はありません。
○ パスネームの変換
UNIX 形式のパスからマック形式のパスが欲しいことがあります。例えば AppleScript や xcmd にフルパスネームを渡すときは、マック形式である必要があります。これには revMacFromUnixPath 関数が使えます。この関数にパスネームを渡すと、例えば "/myHDD/docFolder/doc.txt" が "myHDD:docFolder:doc.txt" に変換されます。
マックではファイルやフォルダに "/" を含んだ名前を付けることが出来ますが、これは UNIX 形式のパスネームに合いません。そこで、RunRev はこれを ":" に変換します。例えば answer file を使ってマック上にある "myHDD:docFolder:doc/1.txt" というファイルのパスネームを得ると、"/myHDD/docFolder/doc:1.txt" という文字列が返ってきます。つまりマック上にある "doc/1.txt" ファイルは、RunRev 上では "doc:1.txt" という名前で呼ばなければいけないわけです。
逆に AppleScript や xfcn から得たマック形式のパスネームを UNIX 形式のパスネームに変換したい時は、revUnixFromMacPath 関数を使います。この関数を通すと、"myHDD:docFolder:doc/1.txt" が "/myHDD/docFolder/doc:1.txt" に変換されます。
Windows ではパスの区切りに \ を使いますが、特に変換関数は用意されていないようです。 Windows 形式のパスから UNIX 形式のパスに変換するには replace "/" with "\" in pathName を、逆の場合は replace "\" with "/" in pathName を行えばいいでしょう。???
○ デフォルトフォルダという概念
RunRev には the defaultFolder というプロパティがあり、いくつかのコマンドや関数はこのフォルダを基準にします。例えば files 関数はこのフォルダの中のファイルをリストアップするし、ファイルパスが必要な部分にファイル名だけを書くと、このフォルダの中のものとして扱われます。
RunRev でスタックを開いた直後なら、defaultFolder は「 RunRev アプリケーションの入っているフォルダ」のパスネーム、スタンドアローンを開いた直後は、「スタンドアローンの入っているフォルダ」のパスネームになっています。 RunRev ではフォルダのパスを示すのに末尾に "/" は付けないので、これらのパスネームの最後はフォルダ名で終わっています。
デフォルトフォルダの値は set the defaultFolder to ... で変更することが出来ます。指定したフォルダが以後デフォルトのフォルダになります。
下の関数を使って、スタックファイルのあるフォルダのパスネームを得ることが出来ます。
function getMyFolder
set the itemDel to "/"
get the fileName of this stack
delete last item of it
return it
end getMyFolder
the fileName of this stack はカレントスタックのフルパスネームです。 HyperTalk の the value of word 2 of the long name of this stack に相当します。ここから名前の部分を削って、スタックファイルのあるフォルダのフルパスネームを得ています。
そして
set the defaultFolder to getMyFolder()
を実行すると、以後スタック(またはスタンドアローン)のあるフォルダがデフォルトフォルダになります。
パスネームを必要とするところに相対パス(頭に "/" を付けない)を書くと、このフォルダの中のファイルやフォルダとみなされます。例えばこの階層にある "data" フォルダにある "doc.txt" ファイルは、"data/doc.txt" でアクセスすることが出来ます。
また、この "data" フォルダをデフォルトフォルダにしい場合は、
set the defaultFolder to ( getMyFolder() &"/data" )
とします。これで "data" フォルダの中のファイルを、"docFile.txt" のようにファイル名だけ(これも一種の相対パス)でアクセス出来るようになります。
デフォルトフォルダと同じ階層にあるフォルダは "../" を使った相対パスでアクセスすることが出来ます。例えば "data" フォルダと同じ階層にある "images" フォルダの "image.jpg" にアクセスするには、"../images/image.jpg" という相対パス(頭に "../" を付ける)が使えます。
○ URL 形式のパスネーム
URL で使われるパスネームでは、一部の記号が置き換えられます。例えば半角スペースを含んだ "top page.html" は、"top+page.html" と表記します。また "~myPage" は "%7EmyPage" と書く必要があります。
これらのファイル名(やディレクトリ名)を普通の表記に戻すには、URLDecode 関数を使います。 RunRev の long files 関数はファイル名部分を URL 形式で返して来るので、このファイル名を普通の表記に戻すときにも使えます。
逆に普通の文字列を URL 形式の文字列に変換したい時は、URLEncode 関数が使えます。
2002.11.09
UDI