* 拆分对账单
*
* Created by albg on 2016/4/15.
*/
class SplitAccount {
/**
* inPath 源文件地址
* outPath 输出文件地址
* 规则:1.以字符串"商户交易明细"为一个子文件的开始标识
* 2.规定前5行为文件头,原因是商户号在地五行
* 3.文件名称为商户号+清算日期
*/
def spilt(inPath:String,outPath:String) ={
var isDeal:Boolean = false //处理标识
var lineNum:Int =0 //行计数器
var isPrt:Boolean = false //打印标识
var topLines:List[String] = Nil //记录文件头
var writer:PrintWriter = null //打印
val read = Source.fromFile(inPath,"gbk") //都入流,设定字符集为gbk
read.getLines().foreach{ v =>//遍历整个文档
if(v.trim.contains( "商户交易明细")){ isDeal = true ; isPrt =false } //开闭
if(isDeal){ //进入文件头处理
lineNum += 1 //记录行数
if(lineNum != 5) topLines = v::topLines //记录文件头
if(lineNum == 5){ //当文件头记完时,进行新文档的处理
val merNo = v.replaceAll(" ","").substring(4,19)+v.replaceAll(" ","").substring(23,31) //设定文件名称
if(writer !=null) writer.close() //关闭上一个写入流
writer = new PrintWriter(new File(outPath+merNo+".txt" )) //新建一个写流
isPrt =true //开启打印
topLines.reverse.foreach( a =>writer.println(a)) //将头部打印
topLines = Nil //将头文件记录清空
isDeal =false //关闭处理
lineNum=0 //清零行数
}
}
if(isPrt) writer.println(v) //打印
}
if(writer !=null) writer.close() //关闭写入流
read.close() //关闭读入流
}
}