出力の指定


フィルタプログラムでの出力の指定

多くのフィルタプログラムは、コマンド行パラメータとして入力ファイルを指定できるようになっていても、出力ファイルを指定できるようにはなっていません。単純に標準出力に書き出すのです。特定のファイルに出力したい場合には、標準出力をリダイレクトします。入力として指定したファイルと同じファイルに出力をリダイレクトしようとすると、そのファイルは壊れてしまいますので最大限の注意が必要です(ただし、あとで説明するように、以外のGUIフロントエンドで標準の「ファイルを開く」ダイアログボックスを使って入力ファイルを指定した場合には、入力ファイルと同じファイルを出力ファイルとして指定しようとしたり、出力ファイルと同じファイルを入力ファイルとして指定しようとしたりすると、エラーが発生し、出力ファイル名はクリアされます)。

エラーメッセージなどは、標準出力ではなく、標準エラー出力に出力されます。これは、エラーメッセージがパイプラインに吸い込まれて消えてしまうのを防ぐためです。

GUIフロントエンドでの出力の指定

GUIフロントエンドは、前節で書かれた動作をできる限り忠実に再現します。起動時の出力グループボックスは、「一時ファイル」チェックボックスがチェックされ、「クリア」ボタンと「追加」チェックボックスは無効になっています。この状態で「実行」を押すと、出力は一時ファイル格納用ディレクトリの#sp???.tmp???の部分は、そのときそのときで異なる16進数)というファイルに書き込まれ、書き込み終了後、テキストエディタ内にオープンされます。「一時ファイル」チェックボックスがチェックされていなくても、出力ファイルが指定されていなければ、出力は一時ファイルに書き込まれます。これらの一時ファイルは、pipeline)を起動、終了したときに削除されます(もちろん、すでに使い終わったもののみ。テキストエディタ内にオープンされているファイルは削除されません)。出力を保存する必要のないときには、この方法で充分だと思います。保存する必要がある場合でも、一時ファイルの内容はエディタ内に表示されているわけですから、エディタの保存コマンドを使えば保存できます。

ファイルを指定

参照」ボタンを押すと、Windows標準の「名前を付けて保存」ダイアログボックスが表示されます(ただし、タイトルは「出力ファイルの選択」になっています)。

 

 

通常は、ダイアログボックスに表示されている以外のファイル名を考えて「ファイル名」エディットボックスに入力することになるでしょう。その場合には、「保存」ボタンをクリックしても、特にメッセージなどは表示されずに、ダイアログボックスはクローズされます。

ここで、入力ファイルとしてすでに指定されているファイルを選択すると、次のようなメッセージボックスが表示されます。このメッセージボックスが表示されたときには、ほかのファイルを指定して「保存」ボタンを押すか、「キャンセル」ボタンを押さなければ、「名前を付けて保存」ダイアログをクローズすることはできません。

 

 

また、出力ファイルが指定されている状態で、出力ファイルと同じファイルを入力ファイルとして指定しようとすると、次のメッセージボックスが表示されます。このメッセージボックスが表示されたときには、出力ファイルはクリアされてしまいますので、改めて指定し直さなければなりません。

 

 

最後に、入力ファイルとして指定されている以外の既存ファイルを指定すると、次のようなメッセージボックスが表示されます。

 

 

このメッセージボックスで「はい」を選択するということは、既存のファイルを壊すということですので、注意してください。ただし、「実行」ボタンを押すか、ファイルをドロップして、実際に出力が発生するまで、ファイルへの書き込みは行われません。

出力ファイルを指定すると、出力グループボックス内のエディットボックスにそのファイル名が表示されます。また、その下に表示されるコマンド行エディットボックスでは、コマンド行の後ろに「>[出力ファイル]」が追加されます。この状態で「実行」ボタンを押すと、出力は指定されたファイルにリダイレクトされます。

ここで「一時ファイル」チェックボックスをチェックすると、2つのエディットボックスの出力ファイル名は消え、出力は一時ファイルに書き込まれるようになります。再び「一時ファイル」チェックボックスのチェックを外すと、先ほどのファイル名がエディットボックスに再び表示され、出力はそのファイルにリダイレクトされるようになります。「参照」ボタンを押すと、「名前を付けて保存」ダイアログボックスの「ファイル名」エディットボックスには、先ほど選択したファイルが表示されます。ファイル名を変更して「OK」ボタンを押せば、新しいファイルが出力ファイルになります。「キャンセル」ボタンを押すか、ファイル名を変更せずに「OK」ボタンを押すと、元のファイルが出力ファイルとして使われ続けます。

追加

出力ファイルが指定されている状態で「追加」チェックボックスをチェックすると、コマンド行表示のリダイレクト記号が「>」ではなく「>>」になります。「追加」が指定されていないときには、出力ファイルの内容はコマンドの出力によって置き換えられますが、「追加」が指定されているときには、出力ファイルの末尾にコマンドの出力が追加されます。

クリア

GUIフロントエンドを起動したときには出力ファイルは指定されておらず、出力ファイルエディットボックスは空欄になっています。出力ファイルを指定したあとも、「一時ファイル」チェックボックスをチェックすれば、出力ファイル、コマンド行エディットボックスから出力ファイルは消えます。しかし、これらのプッシュボタン、チェックボックスだけでは、「一時ファイル」チェックボックスのチェックを外したときに出力ファイルが指定されていない状態に戻すことはできません。これは少し気持ち悪いので、「クリア」ボタンを用意しました。「クリア」ボタンは、出力ファイルが指定されていない状態にプログラムを戻します。

クリップボード

出力グループのクリップボードチェックボックスをチェックすると、出力を一時ファイルに送るか、リダイレクト先のファイルを指定するかにかかわらず(「設定」ダイアログで「標準出力のためにエディタを起動しない」が選択されていたとしても)、標準出力の内容をクリップボードにセットすることができます(ver.2.0以降)。入力グループボックスの方の「クリップボード」チェックボックスとこちらの「クリップボード」チェックボックスの両方をチェックした場合でも、まず、読み出しのためにクリップボードをオープンして、読み出し終了後にクリップボードをクローズし、コマンド行プログラムによる操作を経てから、改めて書き込みのためにクリップボードをオープンして出力をセットしますので、コマンド行で入力ファイルと同じファイルに出力をリダイレクトしようとしたときのような問題は起きません。

Ctrl-Shiftドロップ

エクスプローラや他のGUIフロントエンドで1個のファイルを選択し、[Ctrl]キーと[Shift]キーの両方を押しながら、cmdline)以外のGUIフロントエンドにドラッグアンドドロップまたはコピーアンドペーストすると、そのファイルが出力ファイルとして指定されます。この場合も、上記のチェックは行われます。複数のファイルをドロップ、ペーストしたときには、[Ctrl]キーと[Shift]キーの両方を押していても、それらのファイルは入力ファイルとして使われます。

エクスプローラで1個のディレクトリを選択し、[Ctrl]キーと[Shift]キーの両方を押しながら、以外のGUIフロントエンドにドロップすると、次に出力グループボックスの「参照」ボタンを押したときに表示されるディレクトリがそのディレクトリに変わります。ほとんどのGUIフロントエンドでは、「入力ファイルの追加」ダイアログでも同じディレクトリを使いますので、ディレクトリのCtrl-Shiftドロップ/ペーストは、入力ファイルのスピーディな指定のためにも役に立ちます。ただし、ファイルの場合と同様に、複数のディレクトリをドロップしても無意味です(それだけではなく、「入力ファイル」ダイアログ以外のウィンドウにドロップすると、それまでに指定していた入力ファイルがクリアされてしまいます)。

パイプラインの途中からの出力

pipeline)でパイプラインを組み立てたとき、の出力グループで指定した出力先には、パイプライン全体の処理結果が書き込まれます。しかし、出力が予想したものとは異なるような場合、データがパイプラインの途中でどうなっているのかを知りたくなるかもしれません。そのようなときには、tee)を使います。詳しくは、の項を参照してください。