2005年07月25日
川俣晶の縁側ソフトウェアその他開発日誌 total 4109 count

NT版UNIX-like toolsのjoinfコマンドで数字で始まるファイル名がエラーになる問題

Written By: 川俣 晶連絡先

文字についての注意 §

 下記記事中で、もし"\"が円記号ではなくバックスラッシュに見ている場合、これは通常の日本語Windows環境では円記号("¥")に読み替えてください。

問題 §

 NT版UNIX-like toolsに含まれるjoinfコマンド(関係データべースの合成)で、-oオプションに続けて数字で始まるファイル名を記述するとエラーになり実行されません。

発生例 §

 (NT版UNIX-like tools Version 0.06を使用。環境はWindows XP SP2のコマンドプロンプト上)

C:\>joinf -a1 -e 0 -j 1 -o 1.1 1.2 2.2 40.txt otherFile.txt

Usage: joinf [-a n] [-e string] [-j[1|2] m]

             [-o fieldlist] [-t c] file1 file2

対策1 §

 数字から始まるファイル名を記述する場合は、先頭に".\"を付加します。

C:\>joinf -a1 -e 0 -j 1 -o 1.1 1.2 2.2 .\40.txt otherFile.txt

対策2 §

 -oオプションの次にファイル名を記述しないようにします。

C:\>joinf -e 0 -j 1 -o 1.1 1.2 2.2 -a1 40.txt otherFile.txt

原因と対応について §

 原因は、-oオプションの仕様にあります。-oオプションは、オプションの引数が続けているのか、数字から始まるファイル名が記述されているかを原理的に完全に判別することはできません。たとえば、1.1のような表記は、どちらと解釈しても合法です。

 従って、この挙動は仕様とします。特に修正は行いません。

感想・私が作ったツールではないから焦った…… §

 電子メールでレポートをもらって焦りました。

 何せ、NT版UNIX-like toolsはもともと私が作ったものではありません。私は、DOSからNT(Win32)へとポーティングしただけです。その際、joinfというコマンドは私が欲しかったものに含まれず、ただ単に右から左に機械的にポーティングしただけで終わったものです。

 ですので、まずjoinfコマンドが何をするものかも分からないし、どう動作すれば正常かも分かりません。

 しかし、いざ分かってみると上記のような事情でした。

 joinfコマンドは、これが便利に使える人には非常に便利になりそうですね。