D 簡介 / 宮澤 彰

[ 日本語 / 英語 ]
ダウンロード

目次


Dとは

Dはデータ処理用トゥールで、 Dファイルに対して セレクション、プロジェクション、ソート、ジョイン、 バンドリング、アンバンドリングなどのファイル演算を 行うコマンドラインインタフェースのコマンド群である。 Dはまた,CSVXMLHTMLなど, 他のフォーマットとの相互変換機能を提供する。 特に,DfromHtmlは,HTML文書からデータを取り出す スクレーピング用途に使える。


D-ファイル

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 (:)で区切られている。

このフォーマットはawkRS=""を指定したとき、 また、perl$/ = ""を指定したときの レコードと同じである。 当然通常のエディタでDファイルを作成することができるし、 awkperlsedなどのプログラムで Dファイルを処理することも容易である。

Dファイル規約の詳細については Dintro マニュアル参照のこと。


Dによるデータ処理

Dコマンドは基本的ファイル演算を行う。 例えば、次のようなテキストデータがあるとき、

chapter1        conversion      selection       projection
chapter2        projection      bundling        unbundling

次のような一連のDコマンドで

   DfromLine "chapter:+7,word:*" input-file | \    (Result)
   Dunbundle word | \    (Result)
   Dsort word:f,chapter:n | \    (Result)
   Dbundle word:f | \    (Result)
   Dorder word,chapter | \    (Result)
   DtoLine -f "chapter:/\, /:Chapter%d"

次のような結果が得られる:

bundling        Chapter2
conversion      Chapter1
projection      Chapter1, Chapter2
selection       Chapter1
unbundling      Chapter2

これは、最初の入力ファイルの語索引になっている。 さらに、整形された印刷を行うには DtoTexを使うこともできる。


D-コマンドのいくつか

Dファイルの表示:Dpr

DfdおよびDfdp は、Dファイルのフィールド情報を表示する。

Dファイルからレコードを検索するにはDselect

DfromCsvは、CSV (comma separated value)ファイルをDファイルに変換する。 DfromHtmlは、 HTMLファイルの指定部分をDレコードに変換する。

UNIXユーザのために: cutDprojjoinDjoinsedDedpasteDpastesortDsortgrepDgrepまたは Dselect headDheadtailDtailwcDrc、 そしてuniqDbundle "^" に対応する。 ただし、uniqの代わりにDfreq を使用した方がよいことも多い。

Dselectは、強力な セレクション機能をもっている。 Dedは、 Dl言語によって Dレコードを操作する一般的方法を提供する。

Dコマンドの一覧がDintro マニュアルにあるので、参照のこと。


Dの利点

簡単:

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のしないこと

XMLのような任意の構造は扱わない

任意の深さの構造を扱うことはDのデータモデルの範囲外である。 Dは、2階層のリーフーステム構造を リピーティンググループとして扱えるし、 ユーザ定義の区切り記号を用いてそれらをネストすれば 3階層、4階層を扱うこともできなくはない。 しかし、この方法を任意階層に一般化することは 無理がある。

また、XMLファイルをあるレベルで展開して、 Dファイルに変換することができる。 DfromXmlDtoXml参照。

GUIはない

GUI(グラフィックユーザインタフェース)を 用いたDファイル演算のアプリケーションを作成することは 可能であり、初心者にとっては理解しやすいものとすることが できるだろう。 しかし、開発の手間と、 ファイル処理機能的には 新しいものを付け加えるわけではない という点を考えると 当分の間Dはコマンドを使える ユーザのトゥールにとどまるだろう。

バイナリデータは扱わない

Dはテキストデータだけを扱う。 DfromBinDtoBin の構想は10年以上暖めているが、 まだ実現していない。 少なくとも、バイナリデータを直接 扱うようにはならないであろう。


2014-09-12 アップデート