努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:etl:pentaho:pentaho-999

{

import java.io.*;
import java.util.LinkedHashMap;
import java.util.Map;
 
// ファイル名のフィールドド名
String filecolumn = "filename";
 
// ファイルの項目構成 
Map<String,Integer> collist = new LinkedHashMap<String,Integer>() {
  {
    put("COLUMN1",3); // 3バイト
    put("COLUMN2",2); // 2バイト
    put("COLUMN3",6); // 6バイト
  }
};
 
boolean exitflag   = false;
int     rowcounter = 0;
String   filename;
 
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
 
  if (first) {
    exitflag = false;
    first    = false;
  }
 
  Object[] r = getRow();
 
  if (r == null) {
    setOutputDone();
    return false;
  }
 
  // ファイル名取得フィールドからファイル名を得る
  filename = get(Fields.In, filecolumn).getString(r);
 
  // 指定斧ファイルから1レコードずつ切り出す
  try {
    InputStream input = new FileInputStream(filename);
 
    while(!exitflag) {
 
      rowcounter++;
 
      byte[]   buffer;
      boolean safe = true;
 
      Object[] rec = createOutputRow(r, data.outputRowMeta.size());
 
      // レコードのデータを設定
      for(Map.Entry<String,Integer> item : collist.entrySet()) {
 
        int len = 0 + ((Integer)item.getValue());
 
        try {
          buffer = input.readNBytes(len);
        } catch(IOException e) {
          input.close();
          logError(String.format("rec %d : %s", rowcounter, e.getMessage()) );
          setOutputDone();
          return false;
        }
 
        if ((buffer.length <= 0)||(buffer.length < len)) {
          exitflag = true;
          safe     = false;
          break;
        }
 
        // 項目をレコードのひな型に格納していく
        get(Fields.Out, ((String)item.getKey())).setValue(rec, buffer);
      }
 
      // 1レコード分読み取れたらレコードを書き出す
      if (safe) putRow(data.outputRowMeta, rec);
    }
 
    // 次レコードの準備
    input.close();
    rowcounter = 0;
    exitflag   = false;
 
  } catch (IOException e) {
    logError(String.format("rec %d : %s", rowcounter, e.getMessage()) );
    setOutputDone();
    return false;
  }
 
  return true;
}
documents/etl/pentaho/pentaho-999.txt · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki