吉里吉里プラグインに関するメモ/csvParser.dll

Last-modified: 2016-03-09 (水) 12:17:06

吉里吉里2 version 2.27-dev.20060527で追加されたcsvParser.dllに関するメモ。

CSVParserクラス

コンストラクタ

CSVParser.CSVParser

機能/意味
CSVParserオブジェクトの構築
タイプ
CSVParserクラスのコンストラクタ
構文
CSVParser(target = void)
引数
target…イベントの転送先オブジェクト。未指定時は自分自身に送る
戻り値
なし(void)
説明
CSVParserオブジェクトを構築する

メソッド

CSVParser.init

機能/意味
処理対象テキストの初期化
タイプ
CSVParserクラスのメソッド
構文
init(text)
引数
text…処理対象テキスト
戻り値
なし(void)
説明
処理対象テキスト(CSVファイルから読み込んだ1行)をtextに変更する。parse()が呼び出されるまでパース処理は行われない

CSVParser.initStorage

機能/意味
処理対象CSVファイルの初期化
タイプ
CSVParserクラスのメソッド
構文
initStorage(filename, utf8 = false)
引数
filename…処理対象CSVファイル名
utf8filenameの文字コードがUnicode(UTF-8エンコーディング)の場合はtrueを指定すること。省略時false
戻り値
なし(void)
説明
処理対象CSVファイルをfilenameに変更する。以降、getNextLine()を呼び出せば一行ずつパース処理が行われる

CSVParser.getNextLine

機能/意味
処理対象CSVファイルから一行読み込み
タイプ
CSVParserクラスのメソッド
構文
getNextLine()
引数
なし
戻り値
Arrayオブジェクト(セルの配列)。CSVファイルの終端に到達したらvoid
説明
initStorage()で指定された処理対象CSVファイルから一行読み込み、パース処理を行う。パース処理結果はセルの配列で返される

吉里吉里2 2.27-dev.20060527同梱のcsvParser.dllの場合、getNextLine()メソッドは同一のArrayオブジェクトを使い回していることに注意(CSVParserオブジェクトが内部でArrayオブジェクトを保持、それの参照を返している)。
呼び出すたびにArrayオブジェクトの要素のみ書き換えているため、getNextLine()メソッドの戻り値をinvalidateしてはならない。

吉里吉里2 2.27-dev.20060710以降に同梱のcsvParser.dllの場合、getNextLine()メソッドは新規のArrayオブジェクトを返す仕様に変更されているので、getNextLine()メソッドの戻り値をinvalidateしても問題ない。

CSVParser.parse

機能/意味
処理対象テキストのパース処理を行う
タイプ
CSVParserクラスのメソッド
構文
parse(text = void)
引数
text…処理対象テキスト。省略時はinit()の引数が用いられる
戻り値
なし(void)
説明
処理対象テキストのパース処理を行い、doLine()イベントハンドラを呼び出す

CSVParser.parseStorage

機能/意味
処理対象CSVファイルのパース処理を行う
タイプ
CSVParserクラスのメソッド
構文
parseStorage(filename, utf8 = false)
引数
filename…処理対象CSVファイル名
utf8filenameの文字コードがUnicode(UTF-8エンコーディング)の場合はtrueを指定すること。省略時false
戻り値
なし(void)
説明
処理対象CSVファイルのパース処理を行い、一行ごとにdoLine()イベントハンドラを呼び出す

プロパティ

CSVParser.currentLineNumber

機能/意味
現在の処理済み行番号を取得する
タイプ
CSVParserクラスのプロパティ(読み出し専用)
説明
getNextLine()が処理した行番号を返す。行番号は1オリジンであることに注意

イベント

parse(), parseStorage()メソッドから呼び出されるイベントハンドラ。

CSVParser.doLine

機能/意味
パース処理が終わった
タイプ
CSVParserクラスのイベント
構文
doLine(columns, lineNo)
引数
columns…Arrayオブジェクト(セルの配列)
lineNo…パース処理済みの行番号(1オリジン)
戻り値
なし(void)
説明
パース処理が終わったときに呼び出されるイベントハンドラ

基本的な使い方

initStorage(), getNextLine()メソッド、currentLineNumberプロパティの3つで基本的な処理が可能。
currentLineNumberプロパティは1オリジンであることに注意。
KAG3から利用する場合は、「逆引きマニュアル」の「CSVファイルを読み込むには」を参照。

// csvParser.dllを読み込む
Plugins.link("csvParser.dll");
// CSVParserオブジェクトを作る
var csv = new CSVParser();  // ターゲット省略
// CSVファイルを読み込み
csv.initStorage("test.csv");
// 一行ずつ処理
var arr;
while ((arr = csv.getNextLine()) !== void) {
  System.inform(@"${csv.currentLineNumber}行目: ${arr.join(', ')}");
  invalidate arr;  // ←吉里吉里2 2.27-dev.20060527同梱のcsvParser.dllの場合、この行をコメントにすること
}
// 次のCSVファイルを読み込み
csv.initStorage("test2.csv");
// 中略
// CSVParserオブジェクトを無効化
invalidate csv;

doLine()イベントハンドラを使う方法

CSVファイル全体を処理する方法

CSVファイル全体を処理するには、parseStorage()メソッドを使う。

var et = new EventTarget();  // イベントターゲット:後述
var csv = new CSVParser(et);
csv.parseStorage("test.csv");
csv.parseStorage("test2.csv");
invalidate csv;
invalidate et;

CSVファイルの一行のみ処理する方法

CSVファイルから読み込んだ一行を処理するには、init(), parse()メソッドを使う。

var et = new EventTarget();  // イベントターゲット:後述
var csv = new CSVParser(et);
var arr = new Array();
arr.load("test.csv");
for (var i = 0; i < arr.count; i++) {
  csv.parse(arr[i]);
}
invalidate arr;
invalidate csv;
invalidate et;

doLine()イベントハンドラに関して

parse(), parseStorage()メソッドを呼び出すと、一行ごとにdoLine()イベントハンドラが呼び出される。
currentLineNumberプロパティ同様、doLine()の第2引数lineNoも1オリジンであることに注意。

イベントターゲットを指定する方法

コンストラクタでオブジェクトを指定した場合、そのオブジェクトのdoLine()メソッドが呼び出される。

class EventTarget {
  function EventTarget() { }
  function finalize() { }
  function doLine(columns, lineNo) {
    System.inform(@"EventTarget: columns = ${columns.join(', ')}, lineNo = ${lineNo}");
  }
}
var et = new EventTarget();
var csv = new CSVParser(et);

doLine()メソッドをオーバーライドする方法

CSVParserクラスを継承し、doLine()メソッドをオーバーライドしても良い。

class CSVParser2 extends CSVParser {
  function CSVParser2(et = void) { super.CSVParser(...); }
  function finalize() { super.finalize(); }
  function doLine(columns, lineNo) {
    System.inform(@"CSVParser2: columns = ${columns.join(', ')}, lineNo = ${lineNo}");
  }
}
var csv = new CSVParser2();  // ターゲット省略