吉里吉里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ファイル名
utf8…filenameの文字コードが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ファイル名
utf8…filenameの文字コードが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(); // ターゲット省略