Dはデータ処理用トゥールで、 Dファイルに対して セレクション、プロジェクション、ソート、ジョイン、 バンドリング、アンバンドリングなどのファイル演算を 行うコマンドラインインタフェースのコマンド群である。 Dはまた,CSV,XMLやHTMLなど, 他のフォーマットとの相互変換機能を提供する。 特に,DfromHtmlは,HTML文書からデータを取り出す スクレーピング用途に使える。
Dファイルはいくつかの規約を満たすテキストファイルである。 例を示すと:
tr:Romeo and Juliet / by Mr. William Shakespear
pub:London : Printed for J. Tonson, 1734
phys:84 p. ; 16 cm
tr:The merchant of Venice / by Mr. William Shakespear
pub:London : Printed for J. Tonson, 1734
phys:72 p. ; 17 cm
上記例にあるように、 レコードは空行で区切られたいくつかの行からなる。 各行がフィールドで、フィールド名と値は COLON (:)で区切られている。
このフォーマットはawkでRS=""を指定したとき、 また、perlで$/ = ""を指定したときの レコードと同じである。 当然通常のエディタでDファイルを作成することができるし、 awkやperlやsedなどのプログラムで Dファイルを処理することも容易である。
Dファイル規約の詳細については Dintro マニュアル参照のこと。
Dコマンドは基本的ファイル演算を行う。 例えば、次のようなテキストデータがあるとき、
chapter1 conversion selection projection
chapter2 projection bundling unbundling
次のような一連のDコマンドで
次のような結果が得られる:
bundling Chapter2
conversion Chapter1
projection Chapter1, Chapter2
selection Chapter1
unbundling Chapter2
これは、最初の入力ファイルの語索引になっている。 さらに、整形された印刷を行うには DtoTexを使うこともできる。
Dファイルの表示:Dpr。
DfdおよびDfdp は、Dファイルのフィールド情報を表示する。
Dファイルからレコードを検索するにはDselect。
DfromCsvは、CSV (comma separated value)ファイルをDファイルに変換する。 DfromHtmlは、 HTMLファイルの指定部分をDレコードに変換する。
UNIXユーザのために: cutはDproj、 joinはDjoin、 sedはDed、 pasteはDpaste、 sortはDsort、 grepはDgrepまたは Dselect headはDhead、 tailはDtail、 wcはDrc、 そしてuniqはDbundle "^" に対応する。 ただし、uniqの代わりにDfreq を使用した方がよいことも多い。
Dselectは、強力な セレクション機能をもっている。 Dedは、 Dl言語によって Dレコードを操作する一般的方法を提供する。
Dコマンドの一覧がDintro マニュアルにあるので、参照のこと。
Dコマンドのいくつかはsort, cut or join のようなUNIXのテキストユーティリティと同様の機能を持っている。 しかし、UNIXのテキストユーティリティでは、フィールドが何番目に あるかを覚えていなければならない。 Dではフィールド名が使用できるので、たとえば:
Dsort name infile
と書ける。これは次のような指定:
sort +1 -2 infile
に比べれば、はるかに容易で覚えやすい。
また、UNIXのテキストユーティリティではデータとともに ドキュメントを残しておかなければならない。 数年もすればどのフィールドが何であったかは たいてい忘れてしまう。 しかし、Dファイルではドキュメントがなくても 適切なフィールド名さえつけておけば、 内容を思い出すことは容易である。
現実のデータ処理ではリピーティングフィールドやリピーティンググループ はしばしば出現する。 リレーショナルデータベースやEXCELなどのスプレッドシートでは これら繰り返すデータを自然な形では取り扱えない。 Dはこれらを処理するのに向いている。
また、最終的にリレーショナルデータベースやスプレッドシートを 利用する場合でも、それらのデータの準備段階では Dが大きな力を発揮する。
Dファイルの作成に、 データベース作成時のような面倒なデータ定義はいらない。 作成にあたっても、変更にあたっても、 単にデータの性質にしたがってフィールドを 変えたり、追加すればよい。
Dファイルにはデータ長やフィールド名の長さ、 1レコード内のフィールド数や繰り返し数などに 制限がない。(32ビット整数で表せる範囲という制限を除けば)。
Dファイル規約はきわめて単純であり、 ほとんどどんなプログラムでも扱える。 隠しファイルやレジストリ、リソースなどの 隠されたパラメータも使用しない。 Dコマンドの機能に影響を与える若干の環境変数は 使用するが、必要最小限にとどめてある。 Dファイルの処理にDコマンド以外のプログラムを 使用することに何の問題もない。
任意の深さの構造を扱うことはDのデータモデルの範囲外である。 Dは、2階層のリーフーステム構造を リピーティンググループとして扱えるし、 ユーザ定義の区切り記号を用いてそれらをネストすれば 3階層、4階層を扱うこともできなくはない。 しかし、この方法を任意階層に一般化することは 無理がある。
また、XMLファイルをあるレベルで展開して、 Dファイルに変換することができる。 DfromXml、 DtoXml参照。
GUI(グラフィックユーザインタフェース)を 用いたDファイル演算のアプリケーションを作成することは 可能であり、初心者にとっては理解しやすいものとすることが できるだろう。 しかし、開発の手間と、 ファイル処理機能的には 新しいものを付け加えるわけではない という点を考えると 当分の間Dはコマンドを使える ユーザのトゥールにとどまるだろう。
Dはテキストデータだけを扱う。 DfromBinとDtoBin の構想は10年以上暖めているが、 まだ実現していない。 少なくとも、バイナリデータを直接 扱うようにはならないであろう。