Kettle 生成定制日期文本文件名(转载)

本文介绍如何解决 Kettle 3.2 版本在生成文本文件时无法在每行数据后自动添加分隔符的问题。通过修改 TextFileOutput 类,实现了在数据行末尾加入指定分隔符的功能。

1.发现kettle3.2,生成文本文件数据时,不能在每行数据后加分隔符。

2.具体改造了org.pentaho.di.trans.steps.textfileoutput包TextFileOutput类中

 

 

 

private void writeRowToFile(RowMetaInterface rowMeta, Object[] r) throws KettleStepException
 {
  try
  { 
   if (meta.getOutputFields()==null || meta.getOutputFields().length==0)
   {
    
    for (int i=0;i<rowMeta.size();i )
    {
     if (i>0 && data.binarySeparator.length>0)
                    {
      data.writer.write(data.binarySeparator);
                    }
     ValueMetaInterface v=rowMeta.getValueMeta(i);
                    Object valueData = r[i];
                   
                    // no special null value default was specified since no fields are specified at all
                    // As such, we pass null
                    //
     writeField(v, valueData, null);
//     // 数据末尾加特殊字符
//     if(i==(rowMeta.size()-1)){
//      data.writer.write(data.binarySeparator);
//     }

    }
                data.writer.write(data.binaryNewline);
   }
   else
   {
    
    for (int i=0;i<meta.getOutputFields().length;i )
    {
     if (i>0 && data.binarySeparator.length>0)
      data.writer.write(data.binarySeparator);
 
     ValueMetaInterface v = rowMeta.getValueMeta(data.fieldnrs[i]);
     Object valueData = r[data.fieldnrs[i]];
     writeField(v, valueData, data.binaryNullValue[i]);
//     // 数据末尾加特殊字符
//     if(i==(meta.getOutputFields().length-1)){
//      data.writer.write(data.binarySeparator);
//     }

    }
                data.writer.write(data.binaryNewline);
   }

   incrementLinesOutput();
           
            // flush every 4k lines
            // if (linesOutput>0 && (linesOutput&0xFFF)==0) data.writer.flush();
  }
  catch(Exception e)
  {
   throw new KettleStepException("Error writing line", e);
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值