[RESOLVIDO] Edição de arquivo texto (Groovy)

Bem pessoal, estou tendo algumas dificuldades para a resolução de um problema. Ficarei bastante grato se alguem puder dar um caminho…

é o seguinte: tenho um arquivo texto com a seguinte estrutura:

CAB|34|521424|20100813|115241|20100101|20100131|Teste
GRP|001|115241|1||
PRO|111|CD RW 700MB/80MIN. SEM EMB. MULTILASER|111||UN|8|29||001||||||||
OUM|111|UN|1.00|
PRO|112|CD RW 700MB/80MIN. SEM EMB. MULTILASER#100|111||UN|8|29||001||||||||
OUM|112|UN|1.00|
PRO|138|PAPEL A4 CHAMEX OFFICE|138||UN|8|29||001||||||||
OUM|138|UN||
OUM|138|UND|1.00|UNIDADE
PRO|237|CD R PRINTABLE 700 MB/80MIN SEM EMBALAG ELGIN|237||UN|8|29||001||||||||
OUM|237|UN|1.00|
PNM|138|1403||0|60|UN|100.000|890.000||3||||||1|||||||890.00|||||890.00||||||||01|01|890.00|890.00||||890.000
INM|60.00|CE|1102||60.00|17.00|10.20|||||||N|N|N|N

tem várias linhas a mais porém só serviriam para encher a tela.

Devo tratar cada linha como um registro. Cada "|" inicia um novo campo.
parte do que quero já estou conseguindo mas falta o principal.

Problema: Preciso me preocupar apenas com os "registros" OUM. Onde de acordo com o conteúdo do campo [2] (no caso em questão: UN ou UND) devo acrescentar um campo[5] com o valor UNIDADE.
O código abaixo está fazendo parte do trabalho sujo. Ele organiza cada linha em um List, e faz a triagem e tratamento pelo registro OUM.

def arquivo = new File("temp/TESTE.fs")
def parametro
List registro = []
def content = []

arquivo.splitEachLine(";") {
	parametro = it[0].indexOf("OUM")
	if (parametro != -1) {		
		registro << it[0]
	}

}

registro.each {
	
	def field = it.tokenize("|")
	
	if (field.size() < 4) { 
		field += ""
	}
	
	if((field[2].equals("UN")) | (field[2].equals("UND"))){
		if (field.size() == 4) {
			field[4] = "UNIDADE"
		}
		else {
		}
	}	
	
	content +=  field.join("|")
}

saída:
Registro: [OUM|111|UN|1.00|, OUM|112|UN|1.00|, OUM|138|UN||, OUM|138|UND|1.00|UNIDADE, OUM|237|UN|1.00|] // cada linha começada com OUM
Content: [OUM|111|UN|1.00|UNIDADE, OUM|112|UN|1.00|UNIDADE, OUM|138|UN||UNIDADE, OUM|138|UND|1.00|UNIDADE, OUM|237|UN|1.00|UNIDADE] // as mesmas linhas depois do devido tratamento.

Preciso criar um novo arquivo texto com estas linhas alteradas. Não estou conseguindo. Alguem tem alguma dica? não precisa ser em groovy. Pode ser java puro.

Ok… problema resolvido. Eu estava utilizando a pior maneira possível de tentar resolver o problema.

solução:

def arquivo = new File("temp/TESTE.fs")
def saida = new File("temp/SAIDA.fs")

arquivo.withReader {
    it.each {
        if (it.indexOf("OUM") != -1){
            def field = it.tokenize("|")
           
            if (field.size() < 4) {
                field += ""
            }
           
            if((field[2].equals("UN")) | (field[2].equals("UND"))){
                if (field.size() == 4) {
                    field[4] = "UNIDADE"
                }
                else {
                }
            }
            it = field.join("|")
        }
        println it
        saida << it
        saida << "\n"
    }
}
saida.createNewFile()