犬ぶよツールズ制作記録

Javaによる研究生活のためのパッケージ、犬ぶよツールズ。
その開発と保守のための備忘録

犬ぶよツールズで提供するテキストファイル処理機能

2010-12-07 21:35:23 | Weblog
大量のデータを自動的に生成・編集する場合、テキストファイルは比較的容易に処理が出来る。
また、テキストファイルを大量に生成・編集する場合、スクリプトを使い自動で済ませたい。
そこで、犬ぶよツールズでは、テキストファイルの自動生成・自動編集の機能を提供する。
提供する機能を、以下のように規定する。

● テキストファイルの種類
大量に生成・編集する可能性のあるテキストファイルの種類として、主に以下を想定する。

+ Javaの設定ファイル
+ Logging APIのログ出力
+ bashなどのスクリプトファイル
+ Camma Separated Value (CSV)ファイル
+ gnuplotのスクリプトファイル
+ gnuplotのデータファイル
+ HTML、SVGなどのXMLファイル
+ TeX, LaTeX

スクリプトファイルにたいおうすることで、より柔軟に自動処理が出来る。CVSファイルに対応することで、表計算ソフトとのデータのやり取りが出来る。gnuplotに対応することで、数値データをグラフ化できる。HTMLとSVGに対応することで、ブラウザでデータを見やすくレンダリングできる。
このように、これらのファイルで多くのことが可能になる。

● 標準形式
上記のようなテキストファイルをスクリプトで自動処理する上で、犬ぶよツールズでは次のようなファイルを標準形式として扱う。

+ 改行コードは、JVM(つまるところOS)の改行コードである。
+ 指定の文字(デフォルトでは'#')で始まる行は、コメント行である。
+ 非コメント行は、区切り文字で区切られた列から成る。
+ 区切り文字は、半角スペースとタブである。

このようなファイルは、Javaプログラムから見ると、行はjava.io.Readerで、列はjava.util.StringTokenizerで
解析できるファイルである。
このファイル形式を、Javaのデフォルトの区切り文字で区切られたファイルという意味で、Default-Delimiter Separated Value (DDSV)ファイル形式と呼ぶことにする。この形式のファイルをDDSVファイルと呼ぶ。

● 既存のツール
bashスクリプトでテキストファイルを自動処理することを想定し、POSIX OSでのテキストファイル処理に挙げたツールは使用可能とする。これらのツールで、実現できない、あるいは、実現するのに高度な知識、技術、直観などが要る機能を、犬ぶよツールズで提供する。

● 機能1:文字列処理
上に挙げた項目を踏まえ、犬ぶよツールズではRegrexTextFilterを提供する。既存のツールとRegrexTextFilterがあれば、以下の処理が可能である。

+ DDSVファイルを編集する。
+ テキストファイルをDDSVファイルに変換する。Logging APIのログ出力、CSVファイルなどの解析に適している。
+ DDSVファイルをテキストファイルに変換する。gnuplotのデータファイル、単純なHTMLなどを作るのに適している。
+ テンプレートとDDSVファイルからテキストファイルを生成する。HTML、SVG、LaTeXなどを作るのに適している。


● 機能2:Javaオブジェクトとの変換
機能1によって、様々なテキストファイルの内容をDDSVファイルに書き込める。よって、DDSVファイルをJavaオブジェクトに変換することにより、様々なデータをJavaのオブジェクトに容易に変換できる。具体的には、以下のような機能を提供する。

+ DDSVファイルの指定した列からObject[]を生成する。
+ DDSVファイルの指定した列からString[]を生成する。
+ DDSVファイルの指定した列からint[]を生成する。
+ DDSVファイルの指定した列からdouble[]を生成する。
+ DDSVファイルの指定した複数の列からObject[][]を生成する。
+ DDSVファイルの指定した複数の列からString[][]を生成する。
+ DDSVファイルの指定した複数の列からint[][]を生成する。
+ DDSVファイルの指定した複数の列からdouble[][]を生成する。

これらの機能を最も汎用的な形で提供するため、ライブラリではDDSVファイルをjava.io.InputStreamとして受け取る。

この逆の機能により、Javaオブジェクトから、gnuplotのデータファイルやHTMLを容易に作ることができる。

+ Object[]をDDSVファイルとして書き出す。
+ String[]をDDSVファイルとして書き出す。
+ int[]をDDSVファイルとして書き出す。
+ double[]をDDSVファイルとして書き出す。
+ Object[][]をDDSVファイルとして書き出す。
+ String[][]をDDSVファイルとして書き出す。
+ int[][]をDDSVファイルとして書き出す。
+ double[][]をDDSVファイルとして書き出す。

これらの機能を最も汎用的な形で提供するため、ライブラリではDDSVファイルをjava.io.PrintStreamとして受け取る。

● 機能3:ファイルへのJavaメソッドの適用
機能2によって、DDSVファイルとJavaオブジェクト配列を相互に変換できる。これを基に、DDSVファイルの内容をJavaオブジェクトに変換し、それにJavaメソッドを適用して、その戻り値をDDSVファイルに書き出すことができる。

これは、DDSVファイルからDDSVファイルを作る。結果として、「DDSVファイルにJavaメソッドを適用する」かのようなツールとして使うことができる。
犬ぶよツールズでは、このCUIツールを提供する。

+ DDSVファイルの指定した列に1つの引数をとるメソッドを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した2つ列に2つの引数をとるメソッドを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した複数の列に配列の引数をとるメソッドを適用し、DDSVファイルとして書き出す。

また、数値データの列に対して、Inubuyo Functions 仕様のvalue()を適用するツールも提供する。

+ DDSVファイルの指定した列にRtoRを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した列にRtoR2を適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した列にRtoRnを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した2つの列にR2toRを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した2つの列にR2toR2を適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した2つの列にR2toRnを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した3つの列にR3toRを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した3つの列にR3toR2を適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した3つの列にR3toRnを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した4つの列にR4toRを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した4つの列にR4toR2を適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した4つの列にR4toRnを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した複数の列にRntoRを適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した複数の列にRntoR2を適用し、DDSVファイルとして書き出す。
+ DDSVファイルの指定した複数の列にRntoRmを適用し、DDSVファイルとして書き出す。


● まとめ
以上、RegrexTextFilterと3種類の機能により、広範な種類のテキストファイルにJavaのあらゆるメソッドを適用することができる。これによって、sedとawkを駆使するよりも、強力でわかりやすくテキストファイルを自動生成・自動編集することができる。

POSIX OSでのテキストファイル処理

2010-12-03 13:14:27 | Weblog
LinuxやMac OS Xで使えるテキストファイル処理のツールのうち、
bashの1行コマンドやスクリプトで使えるもの。

● 情報元
Linux テキスト・ユーティティーでデータ抽出を簡易化する
Text Processing in Linux by Darin Brezeale
データファイル処理に便利なUNIXコマンド
ファイル管理コマンド --Mukuan Task Force--

● 行の編集
+ 選択・抽出

+ head
+ tail
+ grep
+ cat

+ 入れ替え

+ sort


● 列の編集
+ 選択

+ cut

+ 選択・抽出・入れ替え

+ awk

+ 結合

+ join
+ paste


● その他
+ 置換

+ sed