Fladimir que bom que te ajudou. Com relação a sua ideia, implementei algumas funcoes a mais no codigo abaixo:
Código: Selecionar todos
* CLIPPER teste.prg
* RTLINK FI teste
*
* COMO USAR: o arquivo BOLETO.TXT deve ser preenchido assim
*
* @nome35
* @codigo09
* @cidade35
*
* ONDE: @nome ‚ o campo a ser alterado
* 35 ‚ a largura da formatacao do campo
*
* NOTA: se a largura for de 1 a 10 preencher sempre com 2 digitos
* @sexo01
*
* IMPRESSAO: @nome35# onde # indica que deve ser feita a impressao desta
* palavra em CONDENSADO
*
* @nome35$ onde $ indica que deve ser feita a impressao em
* ESPANDIDO
*
* Pode definir uma mascara para NEGRITO como % e alterar o IF no
* codigo para permiti-la
*****************************************************************************
//--aqui sao os elementos que devem serem procurados no arquivo BOLETO.TXT
elemento:={"@codigo","@nome","@telefone"}
elemento:={"@telefone","@nome","@codigo"}
//--aqui o array que fornece os dados conforme a posicao ordinal do array acima
conteudo:={"12345","Anderson Vieira","2222-2222"}
conteudo:={"2222-2222","Anderson Vieira","12345"}
//--le o arquivo boleto.txt
string=memoread("BOLETO.TXT",80)
linhas=mlcount(string,80)
//--inicia o varredura no arquivo
for i = 1 to linhas
num_elemento=1
do while num_elemento<=len(elemento)
if at(elemento[num_elemento],memoline(string,80,i))>0
//--se encontrou a string na linha entra aqui
//--obtem a coluna inicial
comeco_col=at(elemento[num_elemento],memoline(string,80,i))
//--rotina para obter o spaco de formatacao
if ISDIGIT(substr(memoline(string,80,i),comeco_col+len(elemento[num_elemento]),1))=.F.
//--se apos a chave existir um espaco indica que nao ha formatacao feita pelo
//--usuario
string=strtran(string,elemento[num_elemento],conteudo[num_elemento])
else
comeco_col=len(substr(memoline(string,80,i),comeco_col,len(elemento[num_elemento])+1))
posicao=1
do while substr(memoline(string,80,i),comeco_col,posicao)$"0123456789"
posicao++
enddo
//--aqui defini a impressao no modo normal
modoimpbasico="chr(18)"
//--aqui defini conforme esta no arquivo BOLETO.TXT
modoimpressao=""
if substr(memoline(string,80,i),comeco_col+posicao,1)="$"
//--expandido
modoimpressao="chr(14)"
elseif substr(memoline(string,80,i),comeco_col+posicao,1)="#"
//--condensado
modoimpressao="chr(15)"
endif
stringtamanho=substr(memoline(string,80,i),comeco_col,posicao)
tamanhofinal=val(substr(memoline(string,80,i),comeco_col,posicao))
string=strtran(string,elemento[num_elemento]+stringtamanho+;
if(!empty(modoimpressao),substr(memoline(string,80,i),comeco_col+posicao,1),""),;
padr(if(!empty(modoimpressao),&modoimpressao+conteudo[num_elemento]+&modoimpbasico,conteudo[num_elemento]),tamanhofinal,"+"))
endif
endif
num_elemento++
enddo
next
*num_elemento++
*enddo
//--grava o arquivo alterado em RETORNO.TMP
memowrit("RETORNO.TMP",string)